C#类中的属性如果设为只读那么属性值是如何来的
答案:2 悬赏:50
解决时间 2021-01-21 08:24
- 提问者网友:焚苦与心
- 2021-01-20 12:02
C#类中的属性如果设为只读那么属性值是如何来的
最佳答案
- 二级知识专家网友:老鼠爱大米
- 2021-01-20 13:29
不矛盾啊,复习一下属性:
class Person
{
private string name; //name字段
public string Name//Name属性
{
get {return name;}
}
}
只读属性就是只有get访问器的属性,通过它能访问私有字段,但外部不能操作私有字段。属性的值就是私有字段的值。也就是说通过只读属性只能读私有字段,不能写私有字段,如果不利用属性,光靠设置字段修饰符就不能完成这个功能。
当然用返回参数的方法也可返回私有字段的值,但是执行get访问器比调用方法开销小。从get访问器返回私有变量并且启用了优化时,对get访问器方法的调用由编译器进行内联,因此不存在方法调用的系统开销。
追问:那私有字段的值从哪里赋值呢?
追答:私有字段也是值类型,任何值类型被使用前必须初始化,正如引用类型被使用前必须实例化。私有字段创建时或者用new初始化为默认值,或者初始化为别的值,或者用类中的方法赋值。
在LINQ to SQL中,属性常用来映射数据库表的字段,下面是O/R设计器产生一个实体类的实例:
[Table(Name = "Person.Contact")]
public class Contact
{
...
private string _FirstName;
[Column(Storage = "_FirstName")]
public string FirstName
{
get { return this._FirstName; }
set { this._FirstName = value; }
}
...
}
私有字段的值来自数据库。实体类的属性一般是读写都有,如果不打算修改数据库,也可以设置为只读。
class Person
{
private string name; //name字段
public string Name//Name属性
{
get {return name;}
}
}
只读属性就是只有get访问器的属性,通过它能访问私有字段,但外部不能操作私有字段。属性的值就是私有字段的值。也就是说通过只读属性只能读私有字段,不能写私有字段,如果不利用属性,光靠设置字段修饰符就不能完成这个功能。
当然用返回参数的方法也可返回私有字段的值,但是执行get访问器比调用方法开销小。从get访问器返回私有变量并且启用了优化时,对get访问器方法的调用由编译器进行内联,因此不存在方法调用的系统开销。
追问:那私有字段的值从哪里赋值呢?
追答:私有字段也是值类型,任何值类型被使用前必须初始化,正如引用类型被使用前必须实例化。私有字段创建时或者用new初始化为默认值,或者初始化为别的值,或者用类中的方法赋值。
在LINQ to SQL中,属性常用来映射数据库表的字段,下面是O/R设计器产生一个实体类的实例:
[Table(Name = "Person.Contact")]
public class Contact
{
...
private string _FirstName;
[Column(Storage = "_FirstName")]
public string FirstName
{
get { return this._FirstName; }
set { this._FirstName = value; }
}
...
}
私有字段的值来自数据库。实体类的属性一般是读写都有,如果不打算修改数据库,也可以设置为只读。
全部回答
- 1楼网友:鸽屿
- 2021-01-20 14:18
声明为属性其实是一种封装,在属性里不是简单的进行读写,它可以设置为只读,只写,可读写 还能控制一些逻辑,要明白为什么,查一下面向对象你面的封装方面的知识你就能豁然开朗了
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯