0

我有一个类 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 的行为不同。看图片。

在此处输入图像描述

为什么两者都以不同的颜色出现?

4

4 回答 4

3

这里

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#

于 2013-09-21T07:00:10.417 回答
0

实际上,当您编写这样的属性时:

public int second {get; set;}

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

private int _second;

(很像你的第一个变量)

并使用您的财产如下

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

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

于 2013-09-21T07:06:49.690 回答
0

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;
于 2013-09-21T06:52:48.197 回答
0

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

于 2013-09-21T06:52:53.930 回答