首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >设置为private或不带private关键字的属性。有什么关系?

设置为private或不带private关键字的属性。有什么关系?
EN

Stack Overflow用户
提问于 2012-05-31 14:48:35
回答 3查看 324关注 0票数 4

我正在设置一个这样的类的属性

代码语言:javascript
复制
public string Name { get; set; }

但我也可以像这样设置属性

代码语言:javascript
复制
public string Name { get; private set; }

我想知道它们之间的区别?他们有什么范围?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-31 14:50:30

对于这种情况,使用私有集的public string Name { get; private set; }意味着从外部看该属性是ReadOnly。当你有一个只读属性并且不想显式声明支持变量时,它很有用。

public string Name { get; private set; }它等同于:

代码语言:javascript
复制
private string _Name;
public string Name
{
    get { return _Name; }
    private set { _Name = value; }
}
票数 3
EN

Stack Overflow用户

发布于 2012-05-31 14:49:13

这意味着您不能从类实例中设置此属性。只有同一类的成员才能设置它。因此,对于局外人来说,这个属性变成了read-only属性。

代码语言:javascript
复制
class Foo
{
    public string Name1 { get; set; }

    public string Name2 { get; private set; }

    public string Name3 { get { return Name2; } set { Name2 = value; }
}

然后

代码语言:javascript
复制
Foo f = new Foo();

f.Name1 = ""; // No Error

f.Name2 = ""; // Error.

f.Name3 = ""; // No Error

Name3将在Name2中设置值,但不能直接在Name2中设置值。

以及它们的作用域是什么?

由于Name1Name3属性是公共属性,因此它们及其get和set方法在任何地方都可用。

Name3也是公共的,但它的set是私有的,因此属性和get方法将在任何地方都可用。Set方法作用域仅限于类(private访问修饰符在定义它的实体内具有作用域)。

票数 5
EN

Stack Overflow用户

发布于 2012-05-31 14:50:32

第一个类将在您的类之外提供SetGet方法。第二个方法有一个在您的类之外可用的Get方法,但是Set方法只在您的类中可用。这通常表示只读行为。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10828697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档