C#类中的属性如果设为只读那么属性值是如何来的

一个类中属性设置为只读的话,那么属性值又从哪里来呢?如果对字段传值,再传给属性,那么从外界不就是可以直接操作字段了?属性以前看起来简单,但不怎么用都是声明个变量来使用,现... 一个类中属性设置为只读的话,那么属性值又从哪里来呢?如果对字段传值,再传给属性,那么从外界不就是可以直接操作字段了? 属性以前看起来简单,但不怎么用都是声明个变量来使用,现在看一下还有点小问题,请解释一下。 展开
 我来答
电子数码小百科NW
2020-02-18 · TA获得超过6493个赞
知道答主
回答量:15
采纳率:0%
帮助的人:3991
展开全部

只读属性就是只有get访问器的属性,通过它能访问私有字段,但外部不能操作私有字段,属性的值就是私有字段的值。操作方法如下:

1、首先,在C#中创建一个自动的只读属性如图所示。

2、即使在类的内部,也无法对该属性赋值,会显示只读。


3、如果将改属性设置get和set,会变成一个可读可写的属性。

4、但是此时,从类的外部也可以修改属性值,这不是想要的效果。

5、配合访问修饰符可以解决问题,给set添加private属性。此时写操作只能内部进行。

6、访问修饰符可以作用在get上或者set上,但是不能同时作用于两者,这样就完成了。

leon382
2011-04-21 · TA获得超过1064个赞
知道小有建树答主
回答量:1744
采纳率:0%
帮助的人:983万
展开全部
声明为属性其实是一种封装,在属性里不是简单的进行读写,它可以设置为只读,只写,可读写 还能控制一些逻辑,要明白为什么,查一下面向对象你面的封装方面的知识你就能豁然开朗了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
th79d
推荐于2017-11-28 · TA获得超过265个赞
知道小有建树答主
回答量:203
采纳率:0%
帮助的人:256万
展开全部
不矛盾啊,复习一下属性:
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)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式