Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
t7000
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 13
1

Как скрывать в редакторе ненужные свойства и методы при наследовании?

30.03.2014, 02:13. Просмотров 770. Ответов 6
Метки нет (Все метки)

Согласно MSDN есть базовый класс Control, Label является его наследником. Однако в Label скрыта часть свойств, событий и методов базового класса. Например, скрыто свойство BackgroundImage, оно присутствует, если набирать вручную, но через точку не доступно. Как добиться такого же эффекта?
Нагуглил вот такую штуку - [EditorBrowsable(EditorBrowsableState.Never)], но это не работает, из С "видно" V и W
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
class C
    {
        class A
        {
            protected int v;
 
            public virtual int V { get { return v; } set { v = value; } }
 
            public virtual int W()
            {
                return v;
            }
 
            public A(int v)
            {
                this.v = v;
            }
        }
 
        class B : A
        {
            [EditorBrowsable(EditorBrowsableState.Never)]
            public override int V { get { return base.V; } }
 
            [EditorBrowsable(EditorBrowsableState.Never)]
            public override int W()
            {
                return base.W();
            }
 
            public B(int v)
                :base(v)
            {
                
            }
        }
 
        public C()
        {
            B n = new B(2);
            System.Console.WriteLine(n.V);
            System.Console.WriteLine(n.W());
 
            System.Console.ReadLine();
        }
    }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2014, 02:13
Ответы с готовыми решениями:

Как удалить свойство при наследовании?
Всем привет! Подскажите как удалить свойство или скрыть его у контрола при...

Классы. Свойства. Методы.
Здравствуйте! Помогите пожалуйста. Есть лабораторная работа и я не все...

Атрибуты C#, Методы, Классы, Свойства
Атрибуты C#, Методы, Классы, Свойства Задача вывести Значение Атрибутов что...

Скрыть методы и свойства у существующего класса
Проблема заключается в следующем: я наследую класс от Form и создаю экземпляр...

Cтандартные свойства и методы работы со строками
Подсчитать сумму и количество всех цифр, входящих в некоторое предложение,...

6
insite2012
Модератор
Эксперт .NET
4865 / 3818 / 1096
Регистрация: 12.10.2013
Сообщений: 11,095
Записей в блоге: 2
30.03.2014, 02:20 2
В базовом классе объявите их как private, и наследники их не увидят. В чем проблема?
0
t7000
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 13
30.03.2014, 02:45  [ТС] 3
Вопрос не в том, как скрыть все и вся, а в том, как в редакторе убрать мусор и сделать так же красиво как в студии. Я недаром привел в пример Control и Label, одним наследникам реализуемые в контроле свойства и методы нужны, а другим нет. И студия скрывает ненужные. Если прописать имя созданного label-а и поставить точку появится список принадлежащих label-у свойств, событий, методов. Все не нужное label-y, но присутствующее в control-е скрыто. Как добиться такого же эффекта?
0
insite2012
Модератор
Эксперт .NET
4865 / 3818 / 1096
Регистрация: 12.10.2013
Сообщений: 11,095
Записей в блоге: 2
30.03.2014, 03:00 4
Ну так откройте тот же Label в декомпиляторе и посмотрите, как он устроен.
0
tezaurismosis
Администратор
Эксперт .NET
8609 / 3895 / 730
Регистрация: 17.04.2012
Сообщений: 8,678
Записей в блоге: 14
30.03.2014, 09:31 5
Цитата Сообщение от t7000 Посмотреть сообщение
Нагуглил вот такую штуку - [EditorBrowsable(EditorBrowsableState.Never)], но это не работает
MSDNIn Visual C#, EditorBrowsableAttribute does not suppress members from a class in the same assembly.

Попробуйте вынести тип в другую сборку.
Цитата Сообщение от insite2012 Посмотреть сообщение
Ну так откройте тот же Label в декомпиляторе и посмотрите, как он устроен.
К сожалению, именно так и устроен
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Label : Control
{
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    [SRDescription("LabelBackgroundImageDescr")]
    [EditorBrowsable(EditorBrowsableState.Never)]
    [Browsable(false)]
    [SRCategory("CatAppearance")]
    public override Image BackgroundImage
    {
      get
      {
        return base.BackgroundImage;
      }
      set
      {
        base.BackgroundImage = value;
      }
    }
}
BrowsableAttribute отвечает за окно свойств.
1
t7000
0 / 0 / 0
Регистрация: 16.05.2013
Сообщений: 13
30.03.2014, 15:06  [ТС] 6
Получается правильный подход это добавить в решение новую библиотеку, поместить туда классы A и B, добавить ссылку в проект на скомпилированный файл библиотеки, возможно в самой библиотеке прописать путь компиляции прямо в Debug проекта?
0
tezaurismosis
Администратор
Эксперт .NET
8609 / 3895 / 730
Регистрация: 17.04.2012
Сообщений: 8,678
Записей в блоге: 14
30.03.2014, 17:42 7
Цитата Сообщение от t7000 Посмотреть сообщение
прописать путь компиляции прямо в Debug проекта
Этого не потребуется, в диалоге добавления ссылки на проект в том же решении есть вкладка "Проекты"
0
30.03.2014, 17:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2014, 17:42

Класс Автомобиль. Конструкторы. Методы. Свойства. Операторы
НЕ ПОНЯЛ ЗАДАЧУ((( Классы. Конструкторы. Методы. Свойства. Операторы. ...

Объявить класс, содержащий поля, методы и свойства
Объявить класс, содержащий два поля целого типа, свойства только для чтения...

Для чего нужны свойства, если есть методы
Вот, сопсна, тоже изучаю сей язык. Книжечку полистываю. Вопрос - мне не совсем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru