我正在使用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";
但无法得到它。为什么呢?
答案 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; }
}