2012-04-18 56 views
0

我使用MVC3和NHibernate 我有一个类叫做激活码像下面访问:如何使私有财产MVC3

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

我想访问控制器LIK这一领域

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

但无法获得它。为什么?

回答

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

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

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

更新:

ActivationCode类应该是这样的:

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

那么我怎么能让他们访问?你能告诉我吗? – priya77 2012-04-18 06:58:41

+1

@ priya77。我做了,从'protected'改为'public' – gdoron 2012-04-18 06:59:17

+0

@ priya77。我添加了完整的代码,你现在明白了吗? – gdoron 2012-04-18 07:02:33

2

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

+0

:所以我可以让他们如何进入?你能告诉我吗? – priya77 2012-04-18 06:55:55

+0

你有没有办法做到这一点....喜欢使用私人而不是像这样的保护或总结? – priya77 2012-04-18 06:58:13

+0

好的,谢谢...我会让他们作为公众:) – priya77 2012-04-18 07:03:10