【问题标题】:public properties or public fields? [duplicate]公共属性还是公共领域? [复制]
【发布时间】:2013-02-13 18:24:46
【问题描述】:

我正在创建一个简单的用户类,如果我使用带有私有字段的公共属性和只使用公共字段,这有关系吗?

这是我的意思的一个例子:

public class clsUser
{
private string name;
private string lName;

    public string Name
    {
        get
        {
            return name;
        }
        set
        {
            name= value;
        }
    }

    public string LName
    {
        get
        {
            return lName;
        }
        set
        {
            lName= value;
        }
    }

public clsUser(string userID)
    {

//get the user id here and set the properties

        this.name= getName(userID);
        this.lName= getLName(userID);      
    }

}

或者我可以做吗

public string name;
public string lName;

public 现在担心输入所有这些:

public string Name
{
    get
    {
        return name;
    }
    set
    {
        name= value;
    }
}

然后我将在另一个页面上使用这些填充一个表单,如下所示:

clsUser cUser - new clsUser("myid");
txtSomething.Text = cUser.name;

等等……

我想我的问题是为什么我需要先将属性重新输入为私有,然后再输入为公共(正如我在所有网络示例中看到的那样)。为什么不一开始就将它们公开?

【问题讨论】:

  • “为什么我需要先将属性重新输入为私有,然后再输入为公共”你不需要。我想你可以写public string Name { get; set; }
  • 你想让使用你的类的人修改属性吗,如果是,那么公开,如果不是那么私有。
  • 不要使用匈牙利符号。你的班级应该被命名为User
  • @TanyaXrum 您看到的代码创建了一个名为 name字段 并允许您通过一个名为 property 访问它i>姓名。由于它是由属性访问的 - 该字段可以保持私有。如果您只使用一个字段 - 是的,您可以将其设为 public 并完全省略该属性。 (至于您是否应该使用字段或属性 - 您可以查看发布给您的问题或其他类似问题的链接。)

标签: c# asp.net .net


【解决方案1】:

您将 字段 与属性混淆了。

String name; 是一个字段
与属性不同,您无法控制它。
如果您最终决定添加验证或更改事件或其他逻辑,则需要将其更改为一个属性,这会破坏已编译的代码。
某些功能(例如,绑定)也只能与属性一起使用。

相反,您可以使用 自动实现的属性 让编译器生成所有样板文件:

public String Name { get; set; }

【讨论】:

    猜你喜欢
    • 2011-10-07
    • 2010-10-12
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 2011-10-11
    • 2018-04-13
    相关资源
    最近更新 更多