3

今天我发现 VS 提供了一种自动定义settersgetters. 为了清楚起见,我有一个简单的课程Students

 class Students
    {
        private string name;
        private Int32 pin;
        private string addres;
        private int phone;
     ...

当我选择name并单击ctrl+ kx然后选择C#然后propg我得到:

   class Students
    {
        private string public int MyProperty { get; private set; }
        private Int32 pin;
        private string addres;
        private int phone;

这样的代码显然存在问题,所以我最终得到:

   class Students
    {
        private string name { get; private set; }
        private Int32 pin;
        private string addres;
        private int phone;

我的问题是 - 这是利用 VS 自动化的正确方法getterssetters?设置和获取 的值的正确语法是name什么?如果这段代码是正确的,是否有一种更优雅的方式来使用 VS 创建我的getterssetters不是我发现的那个?

4

5 回答 5

7

将光标放在私有变量声明上,然后按 ctrl-R,ctrl-E

于 2012-08-14T15:05:02.527 回答
4

不,这不对。您需要的是从字段重构为自动属性,而不是新属性

于 2012-08-14T15:04:16.063 回答
4

您可以键入“prop”,按两次 TAB,Visual Studio 将添加:

public TYPE Type { get; set; }

然后你改变“类型”和“类型”

public string Name { get; set; }

这是在 Visual Studio 中创建属性的最快快捷方式。

编辑:另外,正如 Serg 提到的,您可以转到Refactor->Encapsulate Field菜单选项将您的字段转换为属性。

于 2012-08-14T15:04:36.593 回答
3

自动属性背后的想法是完全删除私有字段,并用自动属性(具有隐藏的支持字段)替换它们。

还有一个代码片段

prop (TAB TAB)

也就是说,您应该考虑将 get / setter 公开,通常的约定是 PascalCase 属性名称,即。

class Students
{
    public string Name { get; set; }
    public Int32 Pin { get; set; }
    public string Address { get; set; }
    public int Phone { get; set; }
   ...

编辑 根据 Servy 的评论,越来越多的趋势是使以数据为中心的类(如 DTO 的不可变. 这将导致设置器私有化,并为类提供初始化构造函数和/或类工厂方法。但那是以后的事情:)

于 2012-08-14T15:04:59.313 回答
2

你得到的语法是正确的......如果你想要一个带有自动支持字段的私有 getter/setter 。

Ctrl +r,e会将您的字段封装在一个属性中,这意味着它将public为您的字段自动生成一个带有 getter/setter 的属性private。例如:

从你的基类开始:

class Students
{
    private string name;
    private Int32 pin;
    private string addres;
    private int phone;

选择名称并单击,ctrl +r,e然后键入要用于新属性的名称(我使用了建议的“名称”),然后按 Enter。你应该得到以下输出:

class Students
{
    private string name;

    public string Name
    {
        get { return name; }
        set { name = value; }
    }
    private Int32 pin;
    private string addres;
    private int phone;
于 2012-08-14T15:15:02.500 回答