2014-02-01 5 views
1

Я создаю список, полученный из CollectionBase, так что я могу использовать свои собственные методы. Это сделано в проекте dll. Я просто хотел узнать, можно ли скрыть методы по умолчанию из CollectionBase, так что при использовании этого списка появляются только мои методы.Создать собственный список без методов по умолчанию

ответ

0

Если его виртуальный метод, вы можете переопределить и изменить любое поведение. Если это не виртуальный метод, вы не можете скрыть их.

В любом случае вы можете повторно объявить метод с помощью 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() 
    { 
    } 
} 
1

Если вы вышли из CollectionBase, то нет, это невозможно. Затем ваш класс является a 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. 
}