【发布时间】:2014-02-01 13:17:06
【问题描述】:
我正在创建一个从 CollectionBase 派生的列表,以便我可以使用自己的方法。这是在 dll 项目中制作的。 我只是想知道是否可以从 CollectionBase 中隐藏默认方法,以便在使用此列表时只显示我的方法。
【问题讨论】:
标签: c# list collectionbase
我正在创建一个从 CollectionBase 派生的列表,以便我可以使用自己的方法。这是在 dll 项目中制作的。 我只是想知道是否可以从 CollectionBase 中隐藏默认方法,以便在使用此列表时只显示我的方法。
【问题讨论】:
标签: c# list collectionbase
如果您从 CollectionBase 派生,那么不,这是不可能的。那么你的类是一个 CollectionBase 并且继承了它的所有方法。隐藏你继承的东西的需要清楚地暗示你不应该使用继承。
您可以改用合成:
public class MyList
{
private List<int> _privateList = new List<int>();
public void MyMethod1()
{
// Do something
}
public void MyMethod2()
{
// Do something
}
public void Add(int x)
{
_privateList.Add(x);
}
// etc.
}
【讨论】:
如果它的虚拟方法,您可以覆盖并更改为您想要的任何行为。如果它不是虚拟方法,则无法隐藏它们。
在任何情况下,您都可以使用new(具有相同的签名)重新声明该方法,并使用Obsolete 属性对其进行标记。如果有人想使用它们,这将强制编译器生成错误。在以下示例中调用Child.Method() 将产生编译器错误。这样可以保证没有人可以使用父类的方法。
public class Parent
{
public void Method()
{
}
}
public class Child : Parent
{
[Obsolete("This method should not be used", true)]
public new void Method()
{
}
}
【讨论】: