处理编程中的属性

时间:2014-04-21 05:12:05

标签: c# asp.net asp.net-mvc-3 asp.net-mvc-4 c#-4.0

我问一个初学者级别的问题。虽然我在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之后

那么在这里创建财产的用途是什么?

2 个答案:

答案 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来实施publicmyVar访问private,{{1}}并且只能在定义的块中访问{也就是说,你的班级而不是你的班级。

顺便说一下,QA以什么方式不回答你的问题?请仔细阅读此内容以供进一步参考。