【问题标题】:get and set in a class在类中获取和设置
【发布时间】:2013-09-21 06:47:41
【问题描述】:

我有一个类 testClass

public class testClass
{
    public int firstInt;
    public int SecondInt { get; set; }
}

在我的页面 _Default 中的一个事件中,我正在创建一个对象并尝试设置属性。

    protected void Button1_Click(object sender, EventArgs e)
    {
        testClass objtestClass = new testClass();
        objtestClass.firstInt = 1;
        objtestClass.SecondInt = 2;
    }

两个值都正确设置。但是 firstInt 和 SecondInt 的行为不同。看图。

为什么两者的颜色不同?

【问题讨论】:

  • 第二个是属性。第一个只是一个公共可见变量。
  • 问:为什么两者的颜色不同? A:因为它们是不同的:一个是公共 int,另一个是公共属性(碰巧读写一个 int)。

标签: c# .net class oop


【解决方案1】:

这里

public class testClass
{
public int firstInt; // a class variable/Field
public int SecondInt { get; set; } // property
}

Variables/Field:一个变量直接对应一个内存位置。您使用单个声明语句定义一个变量。变量可以是局部变量,在过程中定义并且仅在该过程中可用,也可以是成员变量,在模块、类或结构中定义,但不在任何过程中。成员变量也称为字段

Properties: 属性是定义在模块、类或结构上的数据元素。您可以在 Property 和 End Property 语句之间使用代码块定义属性。代码块包含一个 Get 过程、一个 Set 过程或两者。这些过程称为属性过程或属性访问器。除了检索或存储属性值之外,它们还可以执行自定义操作,例如更新访问计数器。

请参阅此处的 Msdn 链接 http://msdn.microsoft.com/en-us/library/sk5e8eth.aspx 了解说明

这个问题在这里也有很好的解释What is Difference between Property and Variable in C#

【讨论】:

    【解决方案2】:

    'firstInt' 是一个类字段(变量),而 'SecondInt' 是一个 .NET 属性。如果需要,可以通过扩展 get 和 set 方法将处理 SecondInt 封装在类中。

    【讨论】:

      【解决方案3】:

      SecondInt 的出现方式是属性的标志。以及你这样做的方式:

      public int SecondInt { get; set; }
      

      使其成为财产。属性易于使用(无需调用 setter/getter 等)。现在 SecondInt 表现为您的测试类的属性。

      编辑:

      通过在 Visual Studio 中重构,您可以自动(或手动)执行此操作:

      private string m_MyProperty;
      public string MyProperty 
      { 
        get { return m_MyProperty; }
        set { m_MyProperty = value; }
      }
      

      这样,您的 MyProperty 属性已创建,该属性为您的私有 m_MyProperty 字符串设置和获取值。您可以将其用作:

      String x = tstobj.MyProperty;
      tstobj.MyProperty = x;
      

      【讨论】:

        【解决方案4】:

        实际上当你这样写一个属性时:

        public int second {get; set;}
        

        称为自动属性,C#自动使用类似私有变量

        private int _second;
        

        (很像你的第一个变量)

        并按照以下方式使用您的财产

        public int second{ get{ return _second;} set{ _second = value;} }
        

        类似于 java 中的 getSecond 和 setSecond 方法。 所以属性就像获取和设置两种不同的方法,并且可以有一个用于存储数据的支持字段(一个私有变量)。用于控制对类内部数据的访问的属性。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-01
          • 1970-01-01
          相关资源
          最近更新 更多