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

  • 相关阅读:
    shell脚本的分发,测试,查看
    shell 脚本获取cpu信息(转载)
    shell 脚本编写之获取字符串长度(转载)
    service
    关于Linux安装中NAT模式和桥接模式的区别详解(转载)
    kdj
    pod 详解
    k8s基本概念,资源对象
    AliOS Things添加环境变量
    子函数通过一级指针访问二维数组
  • 原文地址:https://www.cnblogs.com/LeimOO/p/1653996.html
Copyright © 2011-2022 走看看