Создать собственный список без методов по умолчанию

Я создаю список, полученный из 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.
}
Другие вопросы по тегам