2012-04-18 5 views
0

Я использую Mvc3 и NHibernate У меня есть класс, называемый код активации, как следующее:Как сделать частную собственность доступна в MVC3

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

но не смог его получить. Зачем?

ответ

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:

защищенного ключевым словом является модификатором доступа члена. Защищенный член доступен из класса, в котором он объявлен, и из любого класса, производного от класса, объявившего этот член.

Защищенный член базового класса доступен в производном классе, только если доступ осуществляется через тип производного класса. Например, рассмотрим следующий код:

Update:

ActivationCode класс должен выглядеть следующим образом:

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

Так как я могу сделать их доступными ?? вы можете мне это сказать? – priya77

+1

@ priya77. Я сделал, изменил с 'protected' на' public' – gdoron

+0

@ priya77. Я добавил полный код, теперь вы его получите? – gdoron

2

Вы не можете получить доступ к защищенным членам вне класса, содержащего их или из производных классов. Если вы не изменяете видимость члена, единственный способ получить доступ к нему за пределами класса ActivationCode - использовать Reflection, но это было бы абсолютно ужасно. Я бы рекомендовал сделать его общедоступным или подвергнуть публичному методу, который позволит вам изменить его значение.

+0

: Итак, как я могу сделать их доступными ?? вы можете мне это сказать? – priya77

+0

У вас есть какой-нибудь другой способ сделать это .... как использование частного, а не защищенного или подобранного? – priya77

+0

ok Thanx ... я сделаю их общедоступными :) – priya77