C#(CSharp) | VC/C++ | ASP(ASP.NET) | SQL Server | OpenGL | CMM | 网站开发SEO | 数控技术 | 地理信息系统 | WINDOWS操作系统 |
联高软件 > 技术文档 > C# > C#中的域(FIELD)和属性(PROPERTY) C#软件开发参考文档

C#中的域(FIELD)和属性(PROPERTY)

发表:联高软件www.legalsoft.com.cn,本文被阅读:5506

摘要:文章:C#中的域(FIELD)和属性(PROPERTY) 摘要:访问一个类的成员变量可以有两种方式:域、属性。域作为public类型的成员变量访问,而属性不能直接进行访问,必须通过访问,发表于北京联高软件有限公司技术文章栏目,代码以高亮显示。
关键字:属性, field, property, 访问, set, 变量, 初始, static, readonly, 对象, int, public, filename, 默认, 类型, class, value


访问一个类的成员变量可以有两种方式:域、属性。域作为public类型的成员变量访问,而属性不能直接进行访问,必须通过访问器(accessors)进行。

域(field)
-域表示与对象或类相关联的变量。
-域的声明中如果加上了readonly修饰符,表明该域为只读域。对于只读域我们只能在域的定义中和它所属类的构造函数中进行修改。在其他情况下,域是"只读"的。
-static readonly的作用和#define、const的作用类似。区别是:const型表达式的值是在编译时形成的,而static readonly表达式的值直到程序运行时才形成。如:
public class A
{
public static readonly int X = 1;
}

-C/C++中未经初始化的变量是不能使用的。在C#中,系统将为每个未经初始化的变量提供一个默认值。对于所有引用类型的变量,默认值是null。所有值类型的变量的默认值是固定的。对于静态域,类在装载时对其进行初始化;对于非静态域,在类的实例创建时进行初始化。在默认的初始化之前,域的值是不可预测的。
例如下面的代码是合法的:
class Test
{
static int a = b+ 1;
static int b = a+ 1;
}
实际上等价于:a = 1; b = 2;
而下面的代码则是非法的:
class A
{
int x = 1;
int y = x + 1;
}

因为非静态变量x在类A实例化以前并没有初始化,代码y = x + 1无法得到正确的x的值。

属性(property)
-充分体现了对象的封装性:不直接操作类的数据内容,而是通过访问器进行访问,即借助于get和set对属性的值进行读写;另一方面还可以对数据的访问属性进行控制(当然也可以通过对普通域加readonly关键字来实现。
-设计原则:属性封装了对域的操作。把要访问的域设为private,通过属性中的get和set操作对域进行设置或访问。
-不能把属性作为引用类型或输出参数来进行传递。
-get方法没有参数;set方法有一个隐含的参数value。除了使用了abstract修饰符的抽象属性,每个访问器的执行体中只有分号";"外,其他的所有属性的get访问器都通过return来读取属性的值,set访问器都通过value来设置属性的值。
-采用间接方式来访问对象的属性(间接调用get、set方法):对象.属性 = 值(调用set),变量 = 对象.属性(调用get)。
-在属性的访问声明中:

只有set访问器,表明该属性是只写的。
只有get访问器,表明该属性是只读的。
既有set访问器,又有get访问器,表明该属性是可读可写的。
举例:通过属性访问器访问类的属性。


[C#] ASP.NET中数据库数据导入Excel并打印 (4910)
[C#] .NET中C#实现C/S架构下的TREEVIEW (2065)
[C#] Thread and Sync In C# (C#中的线程与同步) (2831)
[C#] .NET的事务控制. (3805)
[C#] 利用C#实现标准的 Dispose模式 (1828)
[C#] ASP.NET验证控件详解 (2934)
[C#] ASP.NET2.0中实现跨页面提交 (6045)
[C#] ASP.NET中在线用户统计 (3880)
[C#] 实现自己的ASP.NET宿主系统 (1860)
[C#] C#编程入门三部曲:第三步 增加响应用户事件代码 (2267)
[C#] 如何把html中的相对路径变成绝对路径 (5085)
[C#] 如何序列化XML含有二进制数据的类? (1140)
[C#] 提取HTML代码中文字的C#函数 (4055)
[C#] C#实现的18位身份证格式验证算法 (3176)
[C#] 利用C#实现标准的 Dispose模式 (2337)
[C#] C#,深入浅出全接触(二) (3448)
[C#] 用C#读取WINDOWS注册表中的多重字串和二进制字串 (1033)
[C#] UBB(c#完整版) (1928)
[C#] ASP.NET缓存:方法和最佳实践 (2626)

www.315soft.com