VB.NET类继承了一个基类并实现了一个接口问题(在C#中工作)
我试图在VB.NET中创建一个类继承一个基本的抽象类,并实现一个接口。接口声明一个名为Description的字符串属性。基类包含一个名为Description的字符串属性。主类继承基类并实现接口。基类中的描述属性的存在满足接口要求。这在C#中工作正常,但导致VB.NET中的问题。
首先,这里是一个C#代码的示例工作原理: public interface IFoo { string Description { get; set; } } public abstract class FooBase { public string Description { get; set; } } public class MyFoo : FooBase,IFoo { } 现在这里是VB.NET版本,它给出一个编译器错误: Public Interface IFoo Property Description() As String End Interface Public MustInherit Class FooBase Private _Description As String Public Property Description() As String Get Return _Description End Get Set(ByVal value As String) _Description = value End Set End Property End Class Public Class MyFoo Inherits FooBase Implements IFoo End Class 如果我使基类(FooBase)实现接口和添加Implements IFoo.Description的属性一切都是好的,但我不想基类实现接口。 编译器错误是:
VB.NET不能处理这个,或者我需要改变我的语法在某个地方让这个工作?
您需要在基类中将属性标记为Overridable或MustOverride,然后可以在子类中覆盖它:
Public MustInherit Class FooBase Private _Description As String Public Overridable Property Description() As String Get Return _Description End Get Set(ByVal value As String) _Description = value End Set End Property End Class Public Class MyFoo Inherits FooBase Implements IFoo Public Overrides Property Description() As String Implements IFoo.Description Get Return MyBase.Description End Get Set(ByVal value As String) MyBase.Description = value End Set End Property End Class 编辑 Dim X As FooBase = New MyFoo() Trace.WriteLine(X.Description) X.Description中出现了什么?使用Overridable你将获得对子类的调用,同时使用Overload方法,你将得到对基类的调用。既不是对也不错,其理解宣言的后果才是重要的。使用Overload方法,你必须进行转换以获得子实现: Trace.WriteLine(DirectCast(X,MyFoo).Description) 如果你只是从子类调用MyBase.Description的问题是moot,但如果你改变了子类的定义,那么你只需要确保你明白发生了什么。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |