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 回答