我问一个初学者级别的问题。虽然我在MVC
工作,但我对一个简单的概念感到困惑,那就是"属性"。有很多问题
我已经完成了但是肯定存在疑问并且确实能够清除它。
实际上,c#属性用于获取和设置私有字段的值。
像
Public class MyClass
{
private int number;
public int Number{
get{ return this.number;}
set{ number=Value }
}
}
class Program
{
static void Main()
{
MyClass example = new MyClass();
example.Number = 5; // set { }
Console.WriteLine(example.Number); // get { }
}
}
现在,该值也分配给属性,也分配给变量。对? 现在,这是我的疑问:: 当我们在模型中为MVc结构创建属性时,我们只有
public int Number{get;set;}
如果可以使用,那么为什么我们要创建一个不必要的私有访问说明符字段。如果封装是原因或隐藏数据,那么为什么不在MVC模型中?
实际上,在上面的类示例中,我只能使用
Console.WriteLine(example.number);
声明public
之后?
那么在这里创建财产的用途是什么?
答案 0 :(得分:2)
属性可以用于存储,并直接在第一个示例中从备用字段(在您的情况下为number
)中检索值。但属性getter和setter是普通的代码块,您可以根据需要使用它们。因此,您不必分配支持字段,但也可以从getter中的另一个属性派生属性的值,例如。
public int NumberTimesTwo
{
get
{
return Number * 2;
}
}
但是,常见的情况是要检索属性并分配支持字段的值,可以使用快捷方式:
public int Number { get; set; }
在这种情况下,编译器会自动创建一个私有支持字段,该属性在getter中检索并分配到setter中,因此代码等同于以下内容,但输入的内容更少:
private int _number;
public into Number
{
get
{
return _number;
}
set
{
_number = value;
}
}
由于支持字段也是私有的,因此您无法直接从类外部访问它。
答案 1 :(得分:2)
private int myVar;
public int MyProperty
{
get { return myVar; }
set { myVar = value; }
}
您正在使用Encapsulation
MyProperty
来实施public
,myVar
访问private
,{{1}}并且只能在定义的块中访问{也就是说,你的班级而不是你的班级。
顺便说一下,QA以什么方式不回答你的问题?请仔细阅读此内容以供进一步参考。