【问题标题】:Tackling properties in the programming在编程中处理属性
【发布时间】:2014-06-05 03:38:07
【问题描述】:

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

那么在这里创建属性有什么用呢?

【问题讨论】:

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


    【解决方案1】:

    属性可用于直接从支持字段(在您的情况下为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;
        }
    }
    

    由于支持字段也是私有的,因此您不能直接从类外部访问它。

    【讨论】:

      【解决方案2】:
      private int myVar;
      
      public int MyProperty
      {
          get { return myVar; }
          set { myVar = value; }
      }
      

      您正在通过使用MyProperty(即public)来实现Encapsulation,以访问myVar(即private),并且只能在定义的块中访问,即您的类,而不是在它之外。

      顺便说一句,QA 以何种方式无法回答您的问题?尝试浏览此内容以供进一步参考。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多