none
Убрать лишние методы RRS feed

  • Вопрос

  • Здравствуйте!
    Создаю свой класс и хочу чтоб переменная этого класс состояла из моих только методов и параметров.Можно ли как то это сделать?

    Допустим у меня параметры это List<T>,но я не хочу чтоб некоторые методы этого листа присутствовали в классе

    Заранее спасибо!


    • Изменено xero-rock 15 января 2014 г. 11:00
    15 января 2014 г. 10:55

Ответы

  • Добрый день.

    public методы и свойства классов, которые вы используете в явном виде, скрыть нельзя. Но, вы можете сделать свой класс по паттерну Фасад. В этом случае, можно подойти вот так:

    public class MySimpleList<T>
    {
    	private List<T> _list;
    
    	public MySimpleList()
    	{
    		_list = new List<T>();
    	}
    
    	public void Add(T item)
    	{
    		_list.Add(item);
    	}
    
    	public T this[int i]
    	{
    		get
    		{
    			return _list[i];
    		}
    	}
    }
    
    public class MyClass
    {
    	public MySimpleList<int> MyProperty { get; set; }
    }

    Теперь, у моего свойства MyProperty есть только метод добавления и индексатор для чтения:

    Как то так.

    15 января 2014 г. 12:51
    Отвечающий

Все ответы

  • они присутствуют из-за библиотек которые используются из фреймворка. Тот же List<T> отнотиться к System.Collection.Generics, вы либо подключаете его и работаете с List-ом полноценно со всеми его методами расширения, либо вовсе не используете List.

    Даже если создадите свой класс, он автоматический наследуется от System.Object у которого опять таки есть свои методы (Equals(), ToString()). Но иное, если вас это не беспокоит (имеется ввиду Equals(), ToString() и т.д.) то конечно можно написать такой класс, и даже List, но вам придется все сочинять самому, поскольку наследственность выдает все методы.

    К примеру, нужно будет индексировать, добавить свякие там add/delete если надо. Не углубляясь, скорей можно сделать копию List со своими методами. . .

    15 января 2014 г. 12:17
  • Добрый день.

    public методы и свойства классов, которые вы используете в явном виде, скрыть нельзя. Но, вы можете сделать свой класс по паттерну Фасад. В этом случае, можно подойти вот так:

    public class MySimpleList<T>
    {
    	private List<T> _list;
    
    	public MySimpleList()
    	{
    		_list = new List<T>();
    	}
    
    	public void Add(T item)
    	{
    		_list.Add(item);
    	}
    
    	public T this[int i]
    	{
    		get
    		{
    			return _list[i];
    		}
    	}
    }
    
    public class MyClass
    {
    	public MySimpleList<int> MyProperty { get; set; }
    }

    Теперь, у моего свойства MyProperty есть только метод добавления и индексатор для чтения:

    Как то так.

    15 января 2014 г. 12:51
    Отвечающий