0

クラスによって実装されるインターフェイスのいずれかの型であると宣言されている変数に対して、クラスのプロパティを継承クラスで使用できるようにするにはどうすればよいですか?

MyAbstractこれまでに行ったことは、キーワード MustInherit を使用して抽象クラスを作成し、継承クラスMyInheritingClassに継承を追加してから抽象クラスの名前を追加することです。これで問題ありませんが、継承クラスで、そのクラスMyInterfaceでインターフェイスを作成し、そのインターフェイスをコードの他の場所で使用すると、抽象クラスのプロパティが表示されないことがわかりました。インターフェース。

ここで何か間違ったことをしていますか、それとも他に何かする必要がありますか?

例は次のとおりです。

Public MustInherit Class MyAbstract
    Private _myString as String
    Public Property CommonString as String
        Get
            Return _myString
        End Get
        Set (value as String)
            _myString = value
        End Set
    End Property
End Class

Public Class MyInheritingClass
    Inherits MyAbstract
    Implements MyInterface

    Sub MySub(myParameter As MyInterface)
        myParameter.CommonString = "abc" ' compiler error - CommonString is not a member of MyInterface.
    End Sub

    'Other properties and methods go here!'
End Class

これが私がやっていることですが、を使用するMyInterfaceと、抽象クラスのプロパティが表示されません!

4

1 に答える 1

7

私があなたの質問を完全に誤解していない限り、なぜあなたがこの振る舞いに混乱しているのかわかりません. それが本来の動作方法であるだけでなく、C# での動作方法でもあります。例えば:

class Program
{
    private abstract class MyAbstract
    {
        private string _myString;
        public string CommonString
        {
            get { return _myString; }
            set { _myString = value; }
        }
    }

    private interface MyInterface
    {
        string UncommonString { get; set; }
    }

    private class MyInheritedClass : MyAbstract, MyInterface
    {
        private string _uncommonString;
        public string UncommonString
        {
            get { return _uncommonString; }
            set { _uncommonString = value; }
        }
    }

    static void Main(string[] args)
    {
        MyInterface test = new MyInheritedClass();
        string compile = test.UncommonString;
        string doesntCompile = test.CommonString;  // This line fails to compile
    }
}

インターフェイスまたは基本クラスを介してオブジェクトにアクセスすると、そのインターフェイスまたは基本クラスによって公開されているメンバーにのみアクセスできます。のメンバーにアクセスする必要がある場合は、オブジェクトをまたはMyAbstractとしてキャストする必要があります。これは両方の言語に当てはまります。MyAbstractMyInheritedClass

于 2012-10-03T18:47:58.770 に答える