0

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

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";

但无法得到它。为什么?

4

2 回答 2

2

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

于 2012-04-18T06:54:17.213 回答
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
}

您可以将属性从 更改为protectedpublic一样LoginAccountId

阅读有关以下内容的MSDN文章protected

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

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

更新:

该类ActivationCode应如下所示:

public class ActivationCode
{
    public virtual int LoginAccountId { get; set; }
    public virtual string ActivatedCode { get; set; }
    public virtual DateTime ActivationDate { get; set; }
}
于 2012-04-18T06:54:36.990 回答