Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22

Реализация методов свойств явно

07.10.2018, 07:49. Показов 1864. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пусть есть публичное абстрактное свойство X с доступом на чтение и запись:
C#
1
2
3
4
abstract class A
{
    public abstract int X { get; set; }
}
Возможно ли явно реализовать геттер и сеттер этого свойства в классе потомке в виде методов?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.10.2018, 07:49
Ответы с готовыми решениями:

Явно указать какой из перегруженных методов надо вызвать
Смотрите, есть 2 перегруженных метода (exe), делают одно и тоже, возвращают немного разные результаты, более конкретно класс при помощи...

Нет описаний у методов и свойств
Подключил либу Microsoft.Office.Interrop.Excel, но не видно ни 1 описания! Т.е. только названия переменных для методов и не более. Неужели...

Неоднозначный вызов методов или свойств
Добрый день можете подсказать, что делаю не так, ругается на строчку tempField.Shuffle(masField); Неоднозначный вызов методов или свойств,...

9
296 / 125 / 106
Регистрация: 30.10.2015
Сообщений: 690
07.10.2018, 08:34
Если попытаться явно реализовать get_X, set_X, то получим ошибку компиляции. У PropertyInfo есть свойства GetMethod, SetMethod, но они только для чтения. Я думаю, что не получится.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
07.10.2018, 08:44  [ТС]
Спасибо. Примерно то же самое сделал и в отношении интерфейсов:
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
using System;
 
namespace Test
{   
    interface I1
    {
        int X { get; }
    }
    
    class C : I1
    {
        public int get_X() // Метод "Test.C.get_X()" не может реализовать функцию доступа интерфейса "Test.I1.X.get" для типа "Test.C". Используйте явную реализацию интерфейса. (CS0470) - C:\Users\Admin\Documents\SharpDevelop Projects\Test1\Test1\Program.cs:20,14
        {
            return 0;
        }
    }
    
    class Program
    {   
        public static void Main(string[] args)
        {
        }
    }
}
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
07.10.2018, 10:06
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
Возможно ли явно реализовать геттер и сеттер этого свойства в классе потомке в виде методов?
В чем состоит конечная цель?
Если реализовать интерфейс, то так:
C#
1
2
3
4
5
6
7
8
9
10
class C : I1
{
   public int X
   {
      get 
      {
         return 0;
      }
   }
}
Ну или вообще так:
C#
1
2
3
4
class C : I1
{
   public int X => 0;
}
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
07.10.2018, 12:56  [ТС]
kolorotur, описать геттер как метод явно.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
07.10.2018, 13:08
Цитата Сообщение от Соколиный глаз Посмотреть сообщение
описать геттер как метод явно
Это больше похоже не на цель, а на (неверно) выбранный способ достижения цели.
Цель-то в чем?

Сигнатуры для геттеров и сеттеров являются зарезервированными.
Если вам надо реализовать интерфейс явно, то для этого в языке есть готовые инструменты — реализация свойства явно:
C#
1
2
3
4
public class C : I1
{
      int I1.X => 0;
}
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
07.10.2018, 14:38
kolorotur, вопрос из серии можно ли вызвать виртуальный метод базового класса на экземпляре потомка, который его переопределил (не из кода потомка)

Попытаться достичь цель выбранным способом тоже может быть неплохой целью)
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
07.10.2018, 16:01
Цитата Сообщение от КОП Посмотреть сообщение
можно ли вызвать виртуальный метод базового класса на экземпляре потомка, который его переопределил (не из кода потомка)
Сделать-то можно всё: достаточно заменить некоторые инструкции на безусловный переход в нужный метод в ассемблере, который производит джиттер

Однако в теме не уточняется: можно ли (и нужно ли!) это сделать средствами языка или с помощью сторонних инструментов, потому по умолчанию предполагаю, что речь-таки идет о языке.
0
Alvin Seville
 Аватар для Соколиный глаз
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 22
07.10.2018, 18:25  [ТС]
Вопрос возник из-за этого:
Pascal
1
public function get_p1: byte := 0; // Реализуем геттер свойства методом.
В C# так делать нельзя? Делать средствами языка.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
07.10.2018, 18:29
Лучший ответ Сообщение было отмечено Соколиный глаз как решение

Решение

Цитата Сообщение от Соколиный глаз Посмотреть сообщение
В C# так делать нельзя? Делать средствами языка.
Нет, сигнатуры геттеров и сеттеров являются зарезервированными и объявлять их явно: как обычные методы или явные реализации интерфейсов, нельзя — будет ошибка компиляции.
Да и смысл? Есть же свойство с геттером — его и реализуйте, это то же самое.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.10.2018, 18:29
Помогаю со студенческими работами здесь

Неоднозначный вызов следующих методов или свойств
Доброго времени суток. Пытаюсь найти файлы с определёнными расширениями: string filesUP = Directory.GetFiles(textbox1.Text,...

Ошибки: Конструктор не может вызвать сам себя. Неоднозначный вызов следующих методов или свойств
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace...

Реализация динамического определения свойств класса
У меня есть пустой класс со свойствами public class BarLoad { public float Result { get; set; } public...

Реализация методов расширения
using System; namespace ConsoleApp1 { static class ObjectExtension { public static bool IsNull(this object x) { ...

Реализация универсальных методов
Здравствуйте и простите, я не очень давно занимаюсь C#. Подскажите идеи, как реализовать такие универсальные методы: Есть например 2...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru