powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как закрыть свойство в классе-наследнике?
14 сообщений из 14, страница 1 из 1
Как закрыть свойство в классе-наследнике?
    #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
Как закрыть свойство в классе-наследнике?
    #38798584
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
protected override void prop()?
...
Рейтинг: 0 / 0
Как закрыть свойство в классе-наследнике?
    #38798593
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneprotected override void prop()?
наивный подход
...
Рейтинг: 0 / 0
Как закрыть свойство в классе-наследнике?
    #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
Как закрыть свойство в классе-наследнике?
    #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
Как закрыть свойство в классе-наследнике?
    #38798615
Фотография Nika gnome
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallaris....
прошу прощения,
да, всё отлично, всё работает именно так! спасибо))
...
Рейтинг: 0 / 0
Как закрыть свойство в классе-наследнике?
    #38798619
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
интересно, советчики свои предложения проверяют?



Nika gnome,

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


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


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