Создать собственный список без методов по умолчанию
Я создаю список, полученный из CollectionBase, чтобы я мог использовать свои собственные методы. Это сделано в проекте DLL. Я просто хотел узнать, можно ли скрыть методы по умолчанию от CollectionBase, чтобы при использовании этого списка отображались только мои методы.
2 ответа
Если это виртуальный метод, вы можете переопределить и изменить на любое поведение, которое вы хотите. Если это не виртуальный метод, вы не можете их скрыть.
В любом случае вы можете повторно объявить метод с помощью 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()
{
}
}
Если вы наследуете от 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.
}