4

プロパティをプロパティとして定義しpublic、このプロパティにprotectedゲッターがあります。どういう意味ですか?プロパティが公開されている場合、そのための保護されたゲッターを定義するとはどういう意味ですか?以下のコードを参照してください。

    public ISessionFactory SessionFactory
    {
        protected get { return sessionFactory; }
        set { sessionFactory = value; }
    }
4

4 に答える 4

11

つまり、ゲッターはサブクラスからのみ呼び出すことができます。ゲッターの前の「保護された」は、プロパティのゲッター部分の「パブリック」を上書きします。

于 2010-04-17T12:53:08.247 に答える
2

C# では、全体的なプロパティとは異なるアクセス レベル (アクセス修飾子を参照) を持つゲッターとセッターを使用できます。これが一番多いパターン

public class FooObject
{
    public String Foo 
    {
      get;
      private set;
    }
}

これにより、FooObject をインスタンス化するオブジェクトは、Foo の値を取得できますが、その値を設定することはできません。セッターのプライベート修飾子は、FooObject 自体のみがこの機能を持っていることを示します (リフレクションの使用は含まれません)。

これには 2 つの利点があります。

  1. 自動プロパティ (変数に get 値と set 値を割り当てる必要がない) を追加すると、変数を明示的に作成しなくても、プロパティ変数 (コンパイル時に作成されます) のプライベート設定を行うことができます。これがないと、get 関数と set 関数を常にすべてパブリックにする、すべてプライベートにするなどしない限り、自動プロパティを使用できません。

  2. 抽象化のレベルが可能になるため、パブリック、プライベート、またはその他のすべてのメソッドがプロパティを通過し、プライベート変数に直接アクセスすることはありません。詳細については、この質問を参照してください。

インスタンスでは、他のオブジェクトがセッション ファクトリ値を設定できますが、それを継承するクラスだけがそれを取得できます。ほとんどの場合、オブジェクトが値を設定できる場合は、それを取得することもできますが、許可しない方が有益な場合もあります。これが許可されるのは、set イベントでは、プロパティ全体に対して定義された量よりも多くのアクセスが許可されないためです。

私が考えることができる最も良い例は、set イベントで、set オブジェクトが変更された場合です。たとえば、設定イベントが接続オブジェクトの設定であり、設定イベントで接続文字列が追加され、データベースへの接続が開かれた場合 (私の例では、このように動作しないようにコードをリファクタリングするでしょう) 、しかし、そのようなことが起こる可能性があります)。

于 2010-04-17T13:43:46.907 に答える
0

protectedキーワードは、メンバーアクセス修飾子です。保護されたメンバーには、宣言されたクラス内、およびこのメンバーを宣言したクラスから派生したクラス内からアクセスできます。

http://msdn.microsoft.com/en-us/library/bcd5672a(VS.71).aspx

于 2010-04-17T12:54:16.833 に答える
0

保護されたgetは、このプロパティのgetterに、このクラスの継承されたクラスからのみアクセスできることを意味します。セットはパブリックと見なされるため、このプロパティはパブリックに設定できます。

于 2010-04-17T12:54:35.563 に答える