C#关于域、属性、事件、索引指示器介绍

    为了保护类的实例的各种数据信息,C#提供了两种方法:域和属性。其中,属性实现了良好的数据封装和数据隐藏。

1.     

1.1.   声明

C#中,域等价于变量,声明格式如下:attributes field-modifiers type variable-declarators;域的修饰符field-modifiers可以是:

l        new

l        public

l        protected

l        internal

l        private

l        static

l        readonly

在下面的代码中,类A包含了三个域:公有的xy,以及私有的z

class A

    {

        public int x;

        public string y;

        private double z;

    }

1.2.   静态域和非静态域

静态域的声明是使用static修饰符,其它的域都是非静态域。分别属于

C#中的静态变量和非静态变量。

1.3.   只读域

域的声明是如果加上了readonly修饰符,表明该域为只读域。对于只读域我们只能在域的定义中和它所属类的构造函数是进行修改,在其它情况下,域是只读的。如:

class A

    {

        public static readonly double PI=3.1415926;

        public static readonly int kByte = 1024;

    }

只读域和const定义的常量的区别是,简单地说,const定义的常量在编译时形成,而只读域直到程序运行时才形成。

1.4.   域的初始化

C#中,系统将为每个未经初始化的变量提供一个默认值。这虽然在某种程序上保证了程序的安全性,但对于应初始化为某个特殊值的变量忘记初始化,也常常会导致程序执行误入歧途。所有类型的变量的初始值如下表所示:

变量类型

默认值

引用类型

null

整型

0

char

/x0000

flat

0.0f

decimal

0.0m

bool

false

enum

0

2.      属性

属性是对现实世界中实体特征的抽象,它提供了对类或对象性质的访问。

C#中的属性更充分地体现了对象的封装性:不直接操作类的数据内容,而是通过访问器进行访问。它借助于getset对属性的值进行读写。

2.1.   声明

属性采用如下方式进行声明:attributs property-modifiers type member-name{accessor-declarations},属性的修饰符property-modifiers有:

l        new

l        public

l        protected

l        internal

l        private

l        static

l        virtual

l        sealed

l        override

l        abstract

以上修饰符中,staticvirtualoverrideabstract修饰符不能同时使用

虽然属性和域的语法比较类似,但不能把属性当做变量那样使用,也不能把属性作为引用型参数或输出参数来进行传递。

2.2.   访问属性的值

在属性的访问声明中,对属性的值的读操作用get关键字标出,对属性的值的写操作用set关键字标出。如:

class File

    {

        private string s_filename;

        public string Filename

        {

            get

            {

                return s_filename;

            }

            set

            {

                if (s_filename != value)

                {

                    s_filename = value;

                }

            }

        }

    }

    class Program

    {       

        static void Main(string[] args)

        {

            File f = new File();

            f.Filename = "myfile.text";

            string s = f.Filename;

            Console.WriteLine("{0}",s);

            Console.ReadLine();

        }

    }

在属性的访问声明中:

l        只有set访问器,表明属性的值只能进行设置而不能读出

l        只有get访问器,表明属性的值是只读的,不能改写

l        同时具有setget访问器,表明属性的值是可读可写的

3.      索引指示器

索引指示器使得可以像数组好样对对象使用下标。它为我们提供了通过索引方式方便地访问类的数据信息的方法。

4.      事件

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值