Доступ к виртуальной функции в интерфейсе непосредственно из реализованного классаC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Доступ к виртуальной функции в интерфейсе непосредственно из реализованного класса

Сообщение Anonymous »

Скажем, у меня есть следующая функция:

Код: Выделить всё

public interface MyInterface
{
int GetNumber();
virtual int GetTwiceNumber()
=> 2 * GetNumber();
}
Я могу реализовать интерфейс в классе как таковом:

Код: Выделить всё

public class MyClass
: MyInterface
{
public int GetNumber()
=> 5;
}
Я могу получить доступ к функции GetNumber напрямую через класс, но мне нужно получить доступ к функции GetTwiceNumber, переосмыслив MyClass как MyInterface:

Код: Выделить всё

MyClass myObject = new();
Console.WriteLine(((MyInterface)myObject).GetTwiceNumber());
Выход: Я хочу сделать MyInterface.GetTwiceNumber доступным напрямую из класса. В этом примере я, вероятно, мог бы просто скопировать код функции в класс, но для более крупных функций это было бы непрактично. Кроме того, если одна функция была отредактирована, а другая нет, это могло вызвать ошибки, которые было бы трудно отследить.
Я подумал:

Код: Выделить всё

public int GetTwiceNumber()
=> 2 * ((MyInterface)this).GetNumber();
Однако проблема в том, что как только я создаю в своем классе функцию с тем же именем, что и реализованная виртуальная функция, она переопределяет виртуальную функцию, запрещая мне доступ к виртуальной функции. функция, определенная в интерфейсе. В результате приведенный выше код просто выдаст исключение StackOverloadException.
Как я могу разрешить прямой доступ к виртуальной функции, определенной в интерфейсе, через реализованный класс, а не через реализованный класс? требовать от пользователя переинтерпретации класса как этого интерфейса, учитывая, что класс еще не переопределяет виртуальную функцию?

Подробнее здесь: https://stackoverflow.com/questions/769 ... nted-class
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»