我有一个类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表现不同。看图像。
为什么两者都以不同的颜色出现?
答案 0 :(得分: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#
答案 1 :(得分: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;
答案 2 :(得分:0)
'firstInt'是类字段(变量),而'SecondInt'是.NET属性。如果需要,可以通过扩展get和set方法来封装类中的处理SecondInt。
答案 3 :(得分:0)
实际上当你写这样一个属性时:
public int second {get; set;}
调用auto属性,C#自动使用像
这样的私有变量private int _second;
(很像你的第一个变量)
并使用您的财产,如下所示
public int second{ get{ return _second;} set{ _second = value;} }
类似java中的getSecond和setSecond方法。 所以属性就像两个单独的获取和设置方法,并且可以有一个用于存储数据的支持字段(私有变量)。用于控制对类的内部数据的访问的属性。