getter 在 C# 中应该是什么样子

问题描述 投票:0回答:6

我在C#中见过这样的代码:

  private int id {get;set;}

但我只会为该字段创建 getter,因为如果有 get 和 set 则与公共字段相同是唯一的方法是

public int getId(){return id;}

如何在VS2010中自动生成仅getter?

c# visual-studio-2010 getter-setter
6个回答
7
投票

你的意思是如何实现只读属性?如果是这样,请尝试:

public int Id { get; private set;}

4
投票

您所实现的被称为

Automatic Property
,它们看起来像这样:

private string Name { get; set; }

自动属性仅仅是语法糖,实际上,提供了一种简洁、快速的方法来实现此代码:

private string _name;
public string Name 
{ 
    get { return _name; } 
    set { _name = value; } 
}

您可以忽略自动属性,使用手动属性并简单地删除

get
。或者使用自动属性,并通过使用 private 访问修饰符标记
get
,使属性的值只读给外部成员:

public string Name { get; private set; }

您所说的通常使用的代码在 C# 中从来都不是真正需要的,因为属性实际上只是伪装的方法,应该用作更好的约定:

public int getId(){return id;} //bad

1
投票

右键字段,重构,封装字段


1
投票

不,它们不一样。属性编译为绑定到属性的一个或两个方法。例如:

public int Foo { get; private set; }

编译为如下所示的 IL 代码:

private int _foo;
public int Foo { get_Foo = get, set_Foo = set }

public int get_Foo() { return _foo; }
private void set_Foo(int value) { _foo = value; }

换句话说:属性是方法,而字段不是。这就是为什么你可以做这样的事情:

public int Foo { get { return 0; } }

编译为:

public int Foo { get_Foo = get }

public int get_Foo() { return 0;}

更新

现在我明白你的问题了...答案是最后一部分,展示了 getter-only 如何工作以及它的作用:-)


1
投票

我认为你想要一个公开可用的属性,但只能由班级设置。是这样的吗:

 public class Entity
 {
     public void Entity()
     {
         ID = ...;  // Some unique id
     }

     public int ID { get; private set; }
 }

这允许类Entity读取和写入ID,但其他类只能读取ID。


1
投票

这非常相似:

如何创建自动属性

只需输入

prop
,然后写下您的类型,然后按 Tab 键写下您的名字。

© www.soinside.com 2019 - 2024. All rights reserved.