【问题标题】:C# get, set propertiesC# 获取、设置属性
【发布时间】:2013-02-17 14:48:43
【问题描述】:

我有以下代码:

    private void button1_Click(object sender, EventArgs e)
    {
        Class1 myClass = new Class1("ttt");
        myClass.Name = "xxx";
        MessageBox.Show(myClass.Name);
    }

class Class1
{
    string str = "";

    public Class1(string name)   
    {
        str = name;
    }

    public string Name
    {
        get { return str; }
        set;

    }
}

最初我设置:

  myClass.Name = "ccc";

但后来改为:

  myClass.Name = "xxx";

也改变了:

  set {str = value;}

到:

  set;

为什么我运行它时得到的是“ccc”而不是“xxx”?

在我当前的代码中有“ccc”。

【问题讨论】:

  • 显示更改非常令人困惑。只需发布您当前的代码 - 理想情况下作为一个简短但完整程序。
  • 而这段代码实际上可以编译???
  • set; 没有与之关联的操作。它什么也不做。 {str = value;} 是实际设置您的属性的部分。不可删除。
  • 修复你的编译错误。您的 IDE 可能会询问您是否要运行最后一个已知的工作配置。按照我的建议修复编译错误

标签: c# properties get set


【解决方案1】:
public string Name
{
    get { return str; }
    set;

}

应该是

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

【讨论】:

    【解决方案2】:

    如下更改您的 Name 属性:

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

    回答你的问题,你得到“ccc”而不是“xxx”的原因是你有编译错误。当您运行应用程序时,它会询问您是否要运行最新的已知工作配置。上次你的程序编译时,你使用“ccc”作为文字,这就是仍在运行的东西。

    修复编译错误,再次运行,会是“xxx”

    【讨论】:

      【解决方案3】:

      模式

      public string Name {get;set;}
      

      就是所谓的“自动实现的属性”。

      编译器创建一个私有的、匿名的支持字段,该字段只能通过属性的 get 和 set 访问器访问。

      您的原始代码似乎在做的是获取您定义的字段,但在匿名支持字段上设置。因此构建错误...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-15
        • 1970-01-01
        • 2014-06-22
        相关资源
        最近更新 更多