如何在MVC3中访问私有属性

时间:2012-04-18 06:52:28

标签: c# .net asp.net-mvc-3 protected access-specifier

我正在使用Mvc3和NHibernate 我有一个名为激活码的类,如下所示:

public virtual int LoginAccountId { get; set; }
protected virtual string ActivatedCode { get; set; }
protected virtual DateTime ActivationDate { get; set; }

我想在控制器中访问此字段

ActivationCode code=new ActivationCode();
code.ActivatedCode="abc";

但无法得到它。为什么呢?

2 个答案:

答案 0 :(得分:2)

您无法从包含它们的类之外或从派生类访问受保护的成员。如果你不改变成员的可见性,从ActivationCode类外部访问它的唯一方法是使用Reflection,但这绝对是可怕的。我建议将其公开或公开一个允许你修改其值的公共方法。

答案 1 :(得分:1)

该属性为protected,这意味着您只能从类内部或其中一个继承内部访问它。

public class ActivationCode{
    public virtual int LoginAccountId { get; set; }
    protected virtual string ActivatedCode { get; set; }
    protected virtual DateTime ActivationDate { get; set; }

    public void Foo(){
        var x = this.ActivatedCode; // Valid
    }

}

public class Foo{
    new ActivationCode().ActivatedCode //Invalid access
}

您可以将属性从protected更改为public,就像使用LoginAccountId一样。

阅读MSDN有关protected的文章:

  

受保护的关键字是成员访问修饰符。受保护的成员可以在声明它的类中访问,也可以从派生自声明该成员的类派生的任何类中访问。

     

只有通过派生类类型进行访问时,才能在派生类中访问基类的受保护成员。例如,请考虑以下代码段:

<强>更新

ActivationCode类应如下所示:

public class ActivationCode
{
    public virtual int LoginAccountId { get; set; }
    public virtual string ActivatedCode { get; set; }
    public virtual DateTime ActivationDate { get; set; }
}