对于声明为该类实现的接口之一的类型的变量,如何在继承类中使类的属性可用?
到目前为止,我所做的是使用关键字MustInherit创建一个抽象类MyAbstract
,并在继承类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
时,我看不到我的抽象类的属性!
答案 0 :(得分: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
的成员,则需要将对象转换为MyAbstract
或MyInheritedClass
。这两种语言都是如此。