• 总结: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

  • 相关阅读:
    [linux] shell脚本编程-ubuntu创建vsftpd服务
    [linux] C语言Linux系统编程-做成守护进程
    [编程] C语言Linux系统编程-等待终止的子进程(僵死进程)
    [Linux]C语言Linux系统编程创建进程
    [linux] C语言Linux系统编程进程基本概念
    [编程] C语言枚举类型(Enum)
    [编程] C语言结构体指针作为函数参数
    [编程] C语言的二级指针
    [编程] C语言的结构体
    [编程] C语言循环结构计算π的值
  • 原文地址:https://www.cnblogs.com/LeimOO/p/1653996.html
Copyright © 2020-2023  润新知