Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
27 / 29 / 5
Регистрация: 20.02.2012
Сообщений: 350

Как в классе запретить наследование индексатора

22.11.2012, 17:05. Показов 3717. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток ... Задали в универе написать библиотеку классов , необходимо реализовать наследования и так далее.. Все вроде понятно ,НО возникла такая проблема ... Пишу класс Односвязный список , у него определяю наследников - классы Стек и Очередь ... у односвязного списка я написал индексатор ( по логике он там может быть ) , однако у Стека и Очереди индексатора нет и быть не может . Как мне запретить наследование индексатора?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.11.2012, 17:05
Ответы с готовыми решениями:

наследование в классе нескольких функций из другого или как добавить функцию находящуюся в классе в другой класс
есть класс. есть второй класс. как добавить функцию находящуюся в классе в другой класс(второй) при этом второй уже наследует какой то...

Как запретить наследование классов?
вообщем почитал в справке что надо использовать final но не работает type a = class procedure a1; begin ...

Как запретить наследование элементов управления на форме
Добрый день, вот столкнулся с такой проблемой. У меня, при нажатии на кнопку, появляется еще одна форма, новая форма наследуется от...

24
310 / 206 / 44
Регистрация: 15.02.2012
Сообщений: 605
22.11.2012, 17:07
модификатор private, нет?
0
27 / 29 / 5
Регистрация: 20.02.2012
Сообщений: 350
22.11.2012, 17:09  [ТС]
Если я сделаю индексатор private какой тогда от него смысл ? Ведь его нельзя будет использовать в коде программы , разве нет?
0
 Аватар для buntar
543 / 544 / 181
Регистрация: 16.03.2012
Сообщений: 1,160
Записей в блоге: 2
22.11.2012, 17:17
Цитата Сообщение от Sparrow44 Посмотреть сообщение
Если я сделаю индексатор private какой тогда от него смысл ? Ведь его нельзя будет использовать в коде программы , разве нет?
Если пометить любой логически завершенный блок кода(будь это метод, индексатор, поле, свойство) модификатором доступа private, этот член будет доступен только внутри этого класса, - для производных классов, он же будет недоступен. В этом и есть смысл модификатора доступа private.
0
27 / 29 / 5
Регистрация: 20.02.2012
Сообщений: 350
22.11.2012, 17:54  [ТС]
Я пишу библиотеку классов .. в конце я должен получить dll библиотеку , подключить ее к WinForm приложению и там продемонстрировать ее работу ... и если какой то метод будет private то значит из кода winform я не смогу получить к нему доступ , правильно я понимаю смысл работы private ?
0
 Аватар для buntar
543 / 544 / 181
Регистрация: 16.03.2012
Сообщений: 1,160
Записей в блоге: 2
22.11.2012, 17:56
Цитата Сообщение от Sparrow44 Посмотреть сообщение
правильно я понимаю смысл работы private ?
Да, правильно. Но внутри класса вы можете с приватным методом делать что угодно.
0
27 / 29 / 5
Регистрация: 20.02.2012
Сообщений: 350
22.11.2012, 18:04  [ТС]
Цитата Сообщение от buntar Посмотреть сообщение
Да, правильно. Но внутри класса вы можете с приватным методом делать что угодно.
Положим это понятно , но зачем мне индексатор писать , если его нельзя будет использовать? А если бы это был какой - нибудь метод сортировки( опять же односвязные(как и двусвязные) списки можно сортировать ),а вот стек и очередь нельзя .. Как же мне реализовать метод сортировки,который нельзя было бы наследовать , но который я бы мог использовать вне класса
0
310 / 206 / 44
Регистрация: 15.02.2012
Сообщений: 605
22.11.2012, 18:24
Угу, понял вас. Private тут не поможет. Все что могу посоветовать - переделывать архитектуру классов. О способах наследования, которые позволяют члену родителя выглядеть public и при этом не быть доступны наследнику, никогда не слышал
0
 Аватар для buntar
543 / 544 / 181
Регистрация: 16.03.2012
Сообщений: 1,160
Записей в блоге: 2
22.11.2012, 18:29
Разве что можно определить паблик метод в базовом классе, и экранировать(или переопределить, забыл точное название) его в производном классе одноименным классом заглушкой.
0
 Аватар для Darius
37 / 37 / 26
Регистрация: 31.05.2009
Сообщений: 103
22.11.2012, 18:32
Модификатор sealed - запрещает наследовать от класса.

C#
1
2
3
sealed class ClassName:FirstClassName
{
}
fail post
0
27 / 29 / 5
Регистрация: 20.02.2012
Сообщений: 350
22.11.2012, 18:41  [ТС]
Цитата Сообщение от Darius Посмотреть сообщение
Модификатор sealed - запрещает наследовать от класса.
А можно его использовать только к одному методу а не ко всему классу?
0
 Аватар для LeniumSoft
1454 / 847 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
22.11.2012, 18:42
Цитата Сообщение от Darius Посмотреть сообщение
Модификатор sealed - запрещает наследовать от класса.
Ему нужно унаследовать! И при этом так чтоб наследники не получили несколько методов родителя.
0
310 / 206 / 44
Регистрация: 15.02.2012
Сообщений: 605
22.11.2012, 18:46
Цитата Сообщение от Sparrow44 Посмотреть сообщение
А можно его использовать только к одному методу а не ко всему классу?
Нет, модификатор sealed применяется только для классов, а также для методов, которые не должны переопределяться в наследниках
0
27 / 29 / 5
Регистрация: 20.02.2012
Сообщений: 350
22.11.2012, 18:48  [ТС]
Не позволяет sealed заблокировать наследования одного метода ...
0
123 / 121 / 6
Регистрация: 21.12.2011
Сообщений: 348
22.11.2012, 19:02
Sparrow44, выделите индексатор в отдельный интерфейс. В базовом классе должен быть общий функционал для всех наследников, если списку нужен индексатор, а остальным наследникам нет, значит этот функционал не должен находится в базовом классе.

Добавлено через 41 секунду
Цитата Сообщение от LeniumSoft Посмотреть сообщение
И при этом так чтоб наследники не получили несколько методов родителя.
первый признак плохой архитектуры.
1
27 / 29 / 5
Регистрация: 20.02.2012
Сообщений: 350
22.11.2012, 19:10  [ТС]
Преподаватель говорил, что в c++ такой способ точно был... почему же это является признаком плохой архитектуры?
0
123 / 121 / 6
Регистрация: 21.12.2011
Сообщений: 348
22.11.2012, 19:14
Sparrow44, потому что БАЗОВЫЙ класс для того и нужен, что объединяет в себе общий функционал, а не является сборной солянкой. Накрайняк можно сделать индексатор(возможно метод) protected, в стеке и очереди не реализовывать его, а в списке пробросить базовый индексатор(метод) через паблик индексатор списка. но смысл какой?
1
310 / 206 / 44
Регистрация: 15.02.2012
Сообщений: 605
22.11.2012, 19:24
с++ и c# - разные вещи ... если память не изменяет, в c++ можно было менять уровень доступа члена при наследовании ... возможно преподаватель это имел ввиду. Но в c# такого точно нет
1
27 / 29 / 5
Регистрация: 20.02.2012
Сообщений: 350
22.11.2012, 19:30  [ТС]
А не подскажите как реализовать индексатор с помощью интерфейса не приходилось с ними работать ..
Что то такое написал
C#
1
2
3
4
interface IMetod
    {
        public int this[int index] {}
    }
И как потом его использовать в классе?
Понятно что
C#
1
2
3
4
class Name : IMetod
{
...
}
0
123 / 121 / 6
Регистрация: 21.12.2011
Сообщений: 348
22.11.2012, 19:34
Sparrow44, msdn наше всё.
Кликните здесь для просмотра всего текста
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
    // Indexer on an interface:
    public interface ISomeInterface
    {
        // Indexer declaration:
        int this[int index]
        {
            get;
            set;
        }
    }
 
    // Implementing the interface.
    class IndexerClass : ISomeInterface
    {
        private int[] arr = new int[100];
        public int this[int index]   // indexer declaration
        {
            get
            {
                // The arr object will throw IndexOutOfRange exception.
                return arr[index];
            }
            set
            {
                arr[index] = value;
            }
        }
    }
 
    class MainClass
    {
        static void Main()
        {
            IndexerClass test = new IndexerClass();
            System.Random rand = new System.Random();
            // Call the indexer to initialize its elements.
            for (int i = 0; i < 10; i++)
            {
                test[i] = rand.Next();
            }
            for (int i = 0; i < 10; i++)
            {
                System.Console.WriteLine("Element #{0} = {1}", i, test[i]);
            }
 
            // Keep the console window open in debug mode.
            System.Console.WriteLine("Press any key to exit.");
            System.Console.ReadKey();
        }
    }
    /* Sample output:
        Element #0 = 360877544
        Element #1 = 327058047
        Element #2 = 1913480832
        Element #3 = 1519039937
        Element #4 = 601472233
        Element #5 = 323352310
        Element #6 = 1422639981
        Element #7 = 1797892494
        Element #8 = 875761049
        Element #9 = 393083859
     */
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.11.2012, 19:34
Помогаю со студенческими работами здесь

Как запретить использование метода из объекта класса, содержащегося в классе?
class a { public: void set(int x, int y) { mX = x; mY = y; } int getX() { return mX; } int getY() { return mY; }

Наследование от Иоанна. Есть ли возможность как-то вызвать метод Gleb из класса а в классе с
Привет всем. Подскажите пожалуйста using System; class a { protected int x; protected a() { x = 90; } public void...

Наследование. Как сделать так, чтобы присвоение полей исполнилось только в производном классе?
Здравствуйте. При создании экземпляра DerivedClass instance = new DerivedClass(); С начало выполняется присвоение полям значений в...

Наследование в классе
Задание такое,что нужно создать классы которые наследуют класс TPerson ,это все сделано,всё работает. Вопрос такой:можно ли вывести...

Запретить наследование в css
Привет, мир! Возможно ли как-то запретить наследование свойств у элементов в css? P.S. Эта проблема меня мучает уже 4-й год.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru