CLR笔记:9.Property

属性分两种,无参属性,有参属性,后者又叫索引器(indexer)——VB.NET中相应为默认属性。

1.无参属性

CLR支持静态属性,实例属性,抽象属性,虚拟属性,但不能被重载。

属性在MSIL中生成以下内容:

get_XX方法,当在属性中定义了get的时候——XX为属性名

set_XX方法,当在属性中定义了set的时候——XX为属性名

一个位于原数据中的属性定义。

属性不能作为out/ref传递给方法,字段则可以。

如果属性中执行语句过多,要花很多时间,这时候优先选用方法。例如线程同步和Remoting。

多次访问属性,每次返回的值可能不同;而字段的值每次返回都不会改变。例如System.DateTime属性 ——MS以后会将其改为方法。

2.有参属性

定义,有参属性的get方法可以接受1个或者更多参数,set方法可以接受2个或者更多参数

——对比,无参属性get方法无参数,set方法有1个参数。

C#索引器语法,是对[ ]这个运算符的重载,示例如下:

    public class FailSoftArray

    {

        int[] a;

        public int length;

        public FailSoftArray(int length)

        {

            a = new int[length];

            this.length = length;

        }

        public int this[int index]

        {

            get 

            {

                if (index >= 0 & index < length)

                {

                    return a[index];

                }

                else

                    throw new ArgumentOutOfRangeException();

            }

            set

            {

                if (index >= 0 & index < length)

                {

                    a[index] = value;

                }

                else

                    throw new ArgumentOutOfRangeException();

            }

        }

    }

    public class TestIndex

    {

        public TestIndex()

        {

            FailSoftArray fs = new FailSoftArray(5);

            for (int i = 0; i < 5; i++)

            {

                fs[i] = i * 10;

            }

        }

    }

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索参数
, 方法
, index
, 属性
, public
, length
, 有参 抽象
有参
,以便于您获取更多的相关知识。

时间: 2025-01-21 12:38:57

CLR笔记:9.Property的相关文章

CLR笔记系文章目录索引

CLR笔记:18.可空值类型 CLR笔记:17.自定义属性 CLR笔记:16.泛型 CLR笔记:15.委托 CLR笔记:14.接口 CLR笔记:13.数组 CLR笔记:12.枚举类型和位标志 CLR笔记:11.字符串 CLR笔记:10.事件 CLR笔记:9.Property CLR笔记:8.方法 CLR笔记:7.常量和字段 CLR笔记:6.类型和成员基础 CLR笔记:5.基元,引用和值类型 CLR笔记:4.类型基础 CLR笔记:3.共享程序集合强命名程序集 CLR笔记:2.生成,打包,部署,管理

CLR笔记:7.常量和字段

1.常量 常量是永远不会改变的符号.它的值必须在编译时就确定.编译后,CLR将常量的值保存在Assembly的 元数据中,这意味着常量必须是基元类型. 常量是类型的一部分,总是被当成静态成员,但并不显示声明为static. public const Int32 MaxEntriesList = 100; 当代码引用常量时,CLR在元数据中查找该符号,将提取的常量值嵌入到IL中,所以常量没有地址以及 相应的分配内存,而且不能通过引用传递变量,也就是说,在导入一个外部的DLL时,就已经将其中的常 量

CLR笔记:18.可空值类型

前言:System.Nullable<T>在FCL中的实现: System.Nullable<T> where T:struct,所以Nullable<T>是一个值类型 有两个只读属性HasValue和Value,以及GetValueOrDefault方法 18.1 C#语法:Int32? 等价于 Nullable<Int32>,于是可以有: Int32? a = 5; Int32? b = null; 允许类型转换:Int32 c = (Int32)a;

CLR笔记:16.泛型

泛型:支持值类型和引用类型,不支持枚举. 没有泛型属性. 泛型的好处: 源代码保护.使用泛型算法不需要访问算法的源码--相对于C++模板 类型安全--相对于ArrayList 更加清晰的源码--不需要拆箱,显示转换 更佳的性能--不用装箱.测试:循环1000万次,泛型List<T>与ArrayList分别用时0.1s和 2s 16.1 FCL中的泛型 List<T> 取代ArrayList Directory<TKey, TValue>取代HashTable Stack

CLR笔记:14.接口

CLR以及所有托管语言都不支持多继承,通过接口模拟实现 14.1 类和接口的实现 接口定义:为一组方法签名指定一个名称的方式. 类实现接口,就一定要提供接口所有方法的实现. 即使抽象类,也要全部实现,但是,它可以把接口方法声明为abstract的,从而把这个接口方法留给 派生类去实现,如下: public interface ITest { void Test(); } public abstract class AbstractClass : ITest { public abstract v

CLR笔记:13.数组

CLR支持一维/多维/交错数组. 两种声明方式: Array a; a = new String[0, 1]; String[] s = new String[5]; 注意,声明不要给与数组长度,因为此时还不分配内存:new时要指定长度. 将数组声明为Array和像String[]这样带中括号的,效果是一样的,只是前者更灵活,当然类型不安全 ,可能会有运行期错误. 所有数组都隐式派生于System.Array,后者派生自System.Object,所以数组是引用类型. 值类型的数组,new时,会

CLR笔记:6.类型和成员基础

1.Class的可见性有public和internal两种,public对所有程序集都可见,internal仅对其所在的程序 集可见.默认是public的. 2.友元程序集, 使用friend assembly可以实现单元测试,而不使用反射技术. 书上讲的是按照命令行编译. 我测试用的是vs2005的solution,如下: 3.成员的可访问性 成员默认是private的,接口类型的成员都是public的. 子类重写父类的成员时,原始成员与重写成员要有相同的可访问性--C#的约束:CLR的约束是

CLR笔记:5.基元,引用和值类型

5.1基元类型 编译器(C#)直接支持的任何数据类型都称为基元类型(primitive type),基元类型直接映射到FCL中存 在的类型.可以认为 using string = System.String;自动产生. FCL中的类型在C#中都有相应的基元类型,但是在CLS中不一定有,如Sbyte,UInt16等等. C#允许在"安全"的时候隐式转型--不会发生数据丢失,Int32可以转为Int64,但是反过来要显示 转换,显示转换时C#对结果进行截断处理. unchecked和che

CLR笔记:4.类型基础

4.1 所有类型都派生自System.Object System.Object提供的方法:GetType(),ToString(),GetHashCode(),Equals(),MemberwiseClone (),Finalize() 所有对象都是用new操作符创建,创建过程: 1. 计算对象大小,包括"类型对象指针"和"同步块索引" 2.从托管堆分配对象的内存 3.初始化对象的"类型对象指针"和"同步块索引" 4.调用ct