当前位置:  编程技术>.net/c#/asp.net
本页文章导读:
    ▪《Effective C#》读书笔记——条目26:避免返回对内部类对象的引用<使用C#表达设计>        可能你会认为只读属性就只能读取,调用者不可能改变属性值。并非所有的情况都是如此,我们看下面的示例: 1 public class MyBusinessObject 2 { 3 private List<string> listOfData = new .........
    ▪开发人员应该对IIS理论层的知识了解的多一些~第一讲 什么是Http?      定义百度百科定义:超文本传输协议 (HTTP-Hypertext transfer protocol) 是分布式,协作式,超媒体系统应用之间的通信协议。是万维网(world wide web)交换信息的基础。它允许将超文本标记语言 (HTML).........
    ▪RadioButton置于DataList实现单选      本例实现通过RadioButton对DataList控件进行单选。你可以参考下面演示。准备好一个星座对象,并定义好一个泛型List来存储每一个星座名称。using System;using System.Collections.Generic;using System.Linq;using .........

[1]《Effective C#》读书笔记——条目26:避免返回对内部类对象的引用<使用C#表达设计>
    来源:    发布时间: 2013-10-28

  可能你会认为只读属性就只能读取,调用者不可能改变属性值。并非所有的情况都是如此,我们看下面的示例:

1 public class MyBusinessObject
2 {
3 private List<string> listOfData = new List<string> {"COM1","COM2","COM3","COM4","COM5","COM6" };
4
5 public List<string> Data
6 {
7 get { return listOfData; }
8 }
9 //其他细节省略
10 }

本来我们希望MyBusinessOjbect类的Data属性是只读的,但是现在仍然可以通过其返还的引用来改变其内部状态:

1 MyBusinessObject bo = new MyBusinessObject();
2 //访问集合
3 List<string> stuff = bo.Data;
4 //不应该这些,但是这里却允许
5 stuff.Clear();

  显然,这并不是我们希望的行为,我们为类创建了严格的接口,然后让用户通过接口使用对象。我们不希望用户在我们不知道的情况下,访问或者修改对象的内部状态。我们有四种策略可以防止这种类型的内部数据结构遭受有意或无意的修改:

  • 值类型
  • 常量类型
  • 接口
  • 包装器(Wrapper)

 

1.值类型

  当客户代码通过属性来访问值类型的成员时,实际返回的是值类型的副本,而对副本的任何修改都不会影响对象的内部状态。

 

2.常量类型

   常量类型也是安全的(参见:Effective C# 笔记条目20)。我们可以在类型中安全地返回字符串或者其他的常量类型,客户代码不可能对它们做出任何更改,因为我们也可以保证类型内部状态的安全。

 

3.定义接口

   通过定义接口,将客户对内部数据成员的访问权限限制在一部分功能中(参见:Effective C# 笔记条目22)。当我们创建类时,可以创建一组接口来支持类功能的子集。通过接口向外界暴露类的功能,即可尽量地避免内部数据遭到有意或无意的更改。使用IEnumerable接口向外提供List<T>的功能就是这种策略的一个应用。

 

4.提供包装器对象

  提供一个包装器对象,仅暴露该包装器,从而限制对其中对象的访问。System.Collections.ObjectModel.ReadOnlyCollection<T>类型就是对集合的一个标准的只读封装,让其中的数据保持只读:

1 public class MyBusinessObject
2 {
3 private List<string> listOfData = new List<string> {"COM1","COM2","COM3","COM4","COM5","COM6" };
4
5 public List<string> Data
6 {
7 get { return listOfData; }
8 }
9
10 public ReadOnlyCollection<string> CollectionOfData
11 {
12 get { return new ReadOnlyCollection<string>(listOfData); }
13 }
14 //其他细节省略
15 }

 

小节

如果将引用类型通过公有借口暴露给外界,那么对象的使用者即可绕过我们定义的方法和属性来更改对象的内部结构。这违反了我们通常的直觉,也会导致常见的错误。考虑到这一点,你应该修改类暴露出的接口。如果只是简单的返回内部数据,那么实际上就给外界赋予了访问内部成员的权限。客户代码可以调用成员中任何可用的方法。通过使用接口、包装器对象或值类型向外部提供私有数据,即可限制外界对这些数据的访问能力。

本文链接


    
[2]开发人员应该对IIS理论层的知识了解的多一些~第一讲 什么是Http?
    来源:    发布时间: 2013-10-28

定义

百度百科定义:超文本传输协议 (HTTP-Hypertext transfer protocol) 是分布式,协作式,超媒体系统应用之间的通信协议。是万维网(world wide web)交换信息的基础。它允许将超文本标记语言 (HTML) 文档从 Web 服务器传送到 Web 浏览器。HTML 是一种用于创建文档的标记语言,这些文档包含到相关信息的链接。您可以单击一个链接来访问其它文档、图像或多媒体对象,并获得关于链接项的附加信息。

OSI层的位置

HTTP工作在TCP/IP协议体系中的TCP协议上。客户机和服务器必须都支持 HTTP,才能在万维网上发送和接收 HTML 文档并进行交互。

特点

HTTP协议的主要特点可概括如下:
1、支持客户/服务器模式。
2、 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
3、灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
4、无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
5、无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。
请求信息

发出的请求信息包括以下几个: 
●请求行,例如GET /images/logo.gif HTTP/1.1,表示从/images目录下请求logo.gif这个文件。 
●(请求)头,例如Accept-Language: en 
●空行 
●可选的消息体 请求行和标题必须以<CR><LF>作为结尾(也就是,回车然后换行)。空行内必须只有<CR><LF>而无其他空格。在HTTP/1.1协议中,所有的请求头,除post外,都是可选的。
请求方法

HTTP/1.1协议中共定义了八种方法(有时也叫“动作”)来表明Request-URI指定的资源的不同操作方式:
OPTIONS 返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。 
HEAD 向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。 
GET 向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在web app.中。其中一个原因是GET可能会被网络蜘蛛等随意访问。 
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 
PUT 向指定资源位置上传其最新内容。 
DELETE 请求服务器删除Request-URI所标识的资源。 
TRACE 回显服务器收到的请求,主要用于测试或诊断。 
CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 
方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed);当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。 
HTTP服务器至少应该实现GET和HEAD方法,其他方法都是可选的。当然,所有的方法支持的实现都应当符合下述的方法各自的语义定义。此外,除了上述方法,特定的HTTP服务器还能够扩展自定义的方法。
 
感谢您的阅读!

本文链接


    
[3]RadioButton置于DataList实现单选
    来源:    发布时间: 2013-10-28

本例实现通过RadioButton对DataList控件进行单选。你可以参考下面演示。


准备好一个星座对象,并定义好一个泛型List来存储每一个星座名称。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// Summary description for Constellation
/// </summary>
namespace Insus.NET
{
public class Constellation
{
private int _ID;
private string _Name;

public int ID
{
get { return _ID; }
set { _ID = value; }
}
public string Name
{
get { return _Name; }
set { _Name = value; }
}

public Constellation()
{
//
// TODO: Add constructor logic here
//
}

public Constellation(int id, string name)
{
this._ID = id;
this._Name = name;
}

public List<Constellation> GetConstellation()
{
List<Constellation> constellation = new List<Constellation>();

Constellation c = new Constellation(1, " 白羊座");
constellation.Add(c);

c = new Constellation(2, "金牛座");
constellation.Add(c);

c = new Constellation(3, "双子座");
constellation.Add(c);

c = new Constellation(4, "巨蟹座");
constellation.Add(c);

c = new Constellation(5, "狮子座");
constellation.Add(c);

c = new Constellation(6, "处女座");
constellation.Add(c);

c = new Constellation(7, "天秤座 ");
constellation.Add(c);

c = new Constellation(8, "天蝎座");
constellation.Add(c);

c = new Constellation(9, "射手座");
constellation.Add(c);

c = new Constellation(10, "摩羯座");
constellation.Add(c);

c = new Constellation(11, "水瓶座");
constellation.Add(c);

c = new Constellation(12, "双鱼座");
constellation.Add(c);

return constellation;
}
}
}


在.aspx拉一个DataList控件,把RadioButton置于DataList的ItemTemplate模版内。

<asp:DataList ID="DataListConstellation" runat="server" Width="100" CellPadding="0" CellSpacing="0">
<ItemStyle BorderWidth="1" />
<ItemTemplate>
<table>
<tr>
<td>
<asp:RadioButton ID="RadioButtonSelect"
    
最新技术文章:
 




特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3