1

私はC#に少し慣れていないので、なぜこれが許可されているのか混乱しています。

public interface IBase
{
}

public interface ISub : IBase
{
}

public class Thing
{
    protected IBase provider;

    public Thing(IBase provider)
    {
        this.provider = provider;
    }
}

public class AnotherThing : Thing
{
    protected ISub provider;

    public AnotherThing(ISub provider) : base(provider)
    {
        this.provider = provider;
    }
}

provider密集しているだけだといいのですが、コンパイラーに混乱を引き起こさずにオーバーライドする方法がわかりません。

コードは機能します。

4

3 に答える 3

1

あなたは私が推測する2番目のケースについて尋ねます:あなたは何もオーバーライドせず、新しい保護された変数を宣言し、それを明示的に参照しますthis:

this.provider = provider;

provider パラメーターの型ISubは と同じ型であるためthis.provider、コンパイラーは、正確に意味する変数を認識します。

于 2013-09-24T15:00:03.423 に答える
0

providerinAnotherThingが継承されたメンバーを隠していることを示す警告が表示されます。

実質的に何が起こるかは、名前の隠蔽として知られている -のコンテキストでコンパイラが無視providerすることです。ThingAnotherThing

于 2013-09-24T15:01:18.523 に答える