Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как закрыть свойство в классе-наследнике? / 14 сообщений из 14, страница 1 из 1
07.11.2014, 14:56
    #38798579
Nika gnome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть свойство в классе-наследнике?
мне кажется, я глупость спрашиваю... но яндекс не понимает, чего я хочу от него добиться (гугл на инглише тоже)
в базовом классе есть метод (или свойство), которого у наследника быть не должно (вернее, не должно быть доступно извне). Или это невозможно?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
class A
{
   ...
   public void prop()
   {
   }
}
class AA : A
{
  ...
   отменить void prop()
}


main()
{
    a.prop(); //success!
    aa.prop(); //error! 
}
...
Рейтинг: 0 / 0
07.11.2014, 14:59
    #38798584
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть свойство в классе-наследнике?
protected override void prop()?
...
Рейтинг: 0 / 0
07.11.2014, 15:06
    #38798593
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть свойство в классе-наследнике?
Konst_Oneprotected override void prop()?
наивный подход
...
Рейтинг: 0 / 0
07.11.2014, 15:10
    #38798599
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть свойство в классе-наследнике?
Код: 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.
namespace ConsoleApplication5
{
    public class A
    {

        public void prop()
        {
            Console.WriteLine("A:prop()");
        }
    }
    class AA : A
    {
        public new void prop()
        {
            throw new Exception();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            new A().prop();
            new AA().prop();
        }
    }
}
...
Рейтинг: 0 / 0
07.11.2014, 15:15
    #38798610
Nika gnome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть свойство в классе-наследнике?
мм...
не получилось.
Пишет - "override не допустим". Удаляю. Пишет - "напишите new, если необходимо сокрытие свойства". Думаю - это то, что мне нужно. Добавляю. Получаю:
(p.s. прошу прощения, у меня не метод, а свойство, хотя ведь всё равно это не принципиально)
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
class A
{
    ...
    public string conditions
    {get { ... }
      set { ... }
    }
}
class AA:A
{
     ...
    public new string conditions;
}

main()
{
   ...
    aa.conditions = "57"; //вот здесь он всё равно в класс А лезет и выполняет то, что там написано :(
}
...
Рейтинг: 0 / 0
07.11.2014, 15:17
    #38798615
Nika gnome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть свойство в классе-наследнике?
Pallaris....
прошу прощения,
да, всё отлично, всё работает именно так! спасибо))
...
Рейтинг: 0 / 0
07.11.2014, 15:20
    #38798619
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть свойство в классе-наследнике?
интересно, советчики свои предложения проверяют?



Nika gnome,

запрос к гуглу - "c# скрыть метод"
первый попавшийся ответ - http://www.cyberforum.ru/csharp-beginners/thread157007.html
...
Рейтинг: 0 / 0
07.11.2014, 15:27
    #38798628
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть свойство в классе-наследнике?
Изопропилинтересно, советчики свои предложения проверяют?


Что за устаревший взгляд на выдачу предложений? Еще б студию предложил установить
...
Рейтинг: 0 / 0
07.11.2014, 15:35
    #38798637
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть свойство в классе-наследнике?
Nika gnome, подобное желание говорит что ты делаешь что-то не то и наследование здесь не подходит. В C# нет механизма для решения данной задачи. Решение предложенное Pallaris работает только частично т.к. все еще сохраняется возможность обратиться к свойству conditions через базовый класс:
Код: c#
1.
2.
A a = new AA();
a.conditions = "123"; // Есть доступ


Здесь можно применить агрегирование, что правда потребует ручного кодирования для всех public членов, но зато скроет любой public член по настоящему.
Код: 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.
class A
{
    public string conditions
    {
        get { ... }
        set { ... }
    }
    
    public int SomeProperty { get; set; }
    public void Foo()
    {
    }
}

class AA
{
    A a = new A();

    // SomeProperty и Foo() скрывать не хотим
    public int SomeProperty
    {
        get { return a.SomeProperty; }
        set { a.SomeProperty = value; }
    }

    public void Foo()
    {
        a.Foo();
    }
}
...
Рейтинг: 0 / 0
07.11.2014, 15:40
    #38798645
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть свойство в классе-наследнике?
PallarisЧто за устаревший взгляд на выдачу предложений? Еще б студию предложил установить
зачем?
достаточно http://www.compileonline.com/compile_csharp_online.php
...
Рейтинг: 0 / 0
07.11.2014, 16:07
    #38798675
Nika gnome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть свойство в классе-наследнике?
bazileЗдесь можно применить агрегирование, что правда потребует ручного кодирования для всех public членов, но зато скроет любой public член по настоящему.
всю мою программу в основном я именно так и конструирую, агрегируя и создавая "сквозные" методы и свойства. Но тут пришлось сопровождать кое-какой свой старый код... в котором я немножко накасячила :(
...
Рейтинг: 0 / 0
07.11.2014, 16:14
    #38798689
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть свойство в классе-наследнике?
Nika gnomeнемножко накасячила :(
Ошибки надо не признавать. Их надо смывать. Кровью (c)
...
Рейтинг: 0 / 0
07.11.2014, 16:32
    #38798719
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть свойство в классе-наследнике?
Можно так объехать
Код: c#
1.
2.
3.
4.
5.
[Obsolete("Так низзя", true)]
public new  void prop()
{
    throw new Exception("Так низзя");
}
...
Рейтинг: 0 / 0
07.11.2014, 17:11
    #38798774
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как закрыть свойство в классе-наследнике?
Nika gnome Но тут пришлось сопровождать кое-какой свой старый код... в котором я немножко накасячила :(
Ну его можно поменять.
1. Делаем базовый класс без ненужного свойства.
2. Делаем наследника от базового, добавляем "ненужное" свойство и используем в старом коде.
3. Делаем "новый" класс, наследуем от базового, в котором "ненужного" свойства нет и ничего скрывать не нужно.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как закрыть свойство в классе-наследнике? / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]