属性:
1、 属性可以标记任意的访问修饰符,并且可以定义在接口中;
2、 属性类型不能是void类型;
3、 属性的Get访问器不接受参数;
4、 c#不允许出现泛型属性;
5、 属性里访问器的可访问性默认跟属性相同,也可以自行限定;
public class SomeType
{
public string Name
{
get { return null; }
protected set { }
}
}
属性与字段的区别:
1、 属性与字段相似,但属性是方法;
2、 属性方法也会抛出异常,字段的访问则永远不会抛出异常;
3、 属性不能作为out或ref参数传递给方法,字段可以;
索引器:
索引器就是一类特殊的属性,通过它们你就可以像引用数组一样引用自己的类。显然,这一功能在创建集合类的场合特别有用,而在其他某些情况下,比如处理大型文件或者抽象某些有限资源等,能让类具有类似数组的行为当然也是非常有用的。
1、 索引器至少拥有一个参数,也可以拥有多个参数;
2、 参数和返回类型可以是任意的数据类型(除了void);
3、 C#只允许在对象的实例上定义索引器;
4、 不允许出现相同参数集的索引器;
public Accessable_Test this[int i]
{
get { return accesses[i]; }
set { accesses[i] = value; }
}
public Accessable_Test this[string str]
{
get { return null; }
set { }
}
// Error:已经定义了具有相同参数类型的成员
//public string this[int i]
//{
// get { return null; }
// set { }
//}
属性和索引器的区别:
1、 类的每一个属性都必须拥有唯一的名称,而类里定义的每一个索引器都必须拥有唯一的签名(signature)或者参数列表(这样就可以实现索引器重载)。
2、属性可以是static(静态的)而索引器则必须是实例成员。
public class Accessable_Test
{
List<Accessable_Test> accesses = new List<Accessable_Test>();
private int m_id;
public int ID
{
get { return m_id; }
set { m_id = value; }
}
//private string m_str;
// Error:已经包含了ID的定义
//public string ID
//{
// get { return m_str; }
//}
private string m_name;
public string Name
{
get { return m_name; }
set { m_name = value; }
}
public Accessable_Test this[int i]
{
get { return accesses[i]; }
set { accesses[i] = value; }
}
public Accessable_Test this[string str]
{
get { return null; }
set { }
}
// Error:已经定义了具有相同参数类型的成员
//public string this[int i]
//{
// get { return null; }
// set { }
//}
}
文章借鉴:http://www.cnblogs.com/wjfluisfigo/archive/2009/05/04/1448079.html