总结:CLR Via C#(第九章):属性与索引器

属性:

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

原文地址:https://www.cnblogs.com/LeimOO/p/1653996.html