【发布时间】:2011-03-05 11:25:25
【问题描述】:
假设我有 2 个这样定义的接口:
public interface ISkuItem
{
public string SKU { get; set; }
}
public interface ICartItem : ISkuItem
{
public int Quantity { get; set; }
public bool IsDiscountable { get; set; }
}
当我在 C# 中实现接口时,VS 会生成以下模板代码:
public class CartItem : ICartItem
{
#region ICartItem Members
public int Quantity { get {...} set {...} }
public bool IsDiscountable { get {...} set {...} }
#endregion
#region ISkuItem Members
public string SKU { get {...} set {...} }
#endregion
}
在 VB.NET 中,同样的类是这样构建的:
Public Class CartItem
Implements ICartItem
Public Property IsDiscountable As Boolean Implements ICartItem.IsDiscountable
'GET SET'
End Property
Public Property Quantity As Integer Implements ICartItem.Quantity
'GET SET'
End Property
Public Property SKU As String Implements ISkuItem.SKU
'GET SET'
End Property
End Class
VB.NET 明确要求您在实现的每个属性后添加 Implements IInterfaceName.PropertyName,而 C# 仅使用 regions 来指示哪些属性和方法属于接口。
有趣的是,在 VB.NET 中,在 SKU 属性上,我可以指定 Implements ISkuItem.SKU 或 Implements ICartItem.SKU。虽然 VS 构建的模板默认为ISkuItem,但如果我愿意,我也可以指定ICartItem。奇怪的是,因为 C# 只使用regions 来屏蔽继承的属性,所以我似乎无法像在 VB.NET 中那样在 C# 中显式指定 SKU 的实现接口。
我的问题是:能够指定一个或另一个接口以在 VB.NET 中实现属性是否有任何重要性,如果是这样,有没有办法在 C# 中模仿此功能?此外,在实现属性时指定一个接口而不是另一个接口有什么影响?
【问题讨论】:
标签: c# .net vb.net oop inheritance