0

我在 c# 中看到过这种代码:

  private int id {get;set;}

但我只会为该字段创建 getter,因为如果有 get 并为其设置它与 public 字段相同,唯一的方法是

public int getId(){return id;}

如何在VS2010中只自动生成getter

4

6 回答 6

7

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

public int Id { get; private set;}
于 2013-01-19T20:39:09.643 回答
4

你已经实现的被称为Automatic Property它们看起来像这样:

private string Name { get; set; }

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

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

您可以忽略自动属性,使用手动属性并简单地删除get. get或者使用自动属性并通过使用 private 访问修饰符标记来使属性的值只读给外部成员:

public string Name { get; private set; }

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

public int getId(){return id;} //bad
于 2013-01-19T20:43:21.750 回答
1

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

于 2013-01-19T20:39:59.787 回答
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 如何工作以及它的作用:-)

于 2013-01-19T20:42:07.340 回答
1

这是非常相似的:

如何创建自动属性

只需提示,然后输入prop您的类型,然后按 Tab 键输入您的姓名。

于 2013-01-19T20:42:19.893 回答
1

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

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

     public int ID { get; private set; }
 }

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

于 2013-01-19T20:43:06.663 回答