0

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

しかし、それを取得できません。なぜ?

4

2 に答える 2

2

保護されたメンバーを含むクラスの外部から、または派生クラスから、保護されたメンバーにアクセスすることはできません。メンバーの可視性を変更しない場合、ActivationCode クラスの外部からメンバーにアクセスする唯一の方法は Reflection を使用することですが、それは絶対に恐ろしいことです。公開するか、その値を変更できる public メソッドを公開することをお勧めします。

于 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
}

と同様に、プロパティを からprotectedに変更できます。publicLoginAccountId

についての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 に答える