zoukankan      html  css  js  c++  java
  • 总结: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

  • 相关阅读:
    html设置360兼容/极速模式
    es查询备忘录
    TypeError: __init__() got an unexpected keyword argument 'strict'
    pandas处理csv
    scrapy中cookie处理
    滑动验证码破解(一)
    python 自定义属性访问 __setattr__, __getattr__,__getattribute__, __call__
    数据库的增删改、单表查询
    库的操作,表的操作,数据类型,完整性约束
    Mysql常用命令(二)
  • 原文地址:https://www.cnblogs.com/LeimOO/p/1653996.html
Copyright © 2011-2022 走看看