EADever Ответов: 1

Вызов функции C# и переменная абстрактный класс расширяется


Привет, у меня есть вопрос о переносе кода с JAVA на C#.
Но у меня возникла проблема с вызовом функции и переменной.

Что я уже пробовал:

на Яве я горю этим:
public abstract class VisibleObjectController<T extends VisibleObject> {}

и в C# я сделал это:
public abstract class VisibleObjectController<T> where T : VisibleObject {}


Теперь я не знаю о переменной и функции вызова этого класса VisibleObjectController в c#
это JAVA:
private final VisibleObjectController< ? extends VisibleObject > controller;

    public VisibleObjectController< ? extends VisibleObject > getController() {
        return controller;
    }




Так как же я могу сделать то же самое в c#?

Richard Deeming

AFAIK, параметры типа wilcard Java не поддерживаются в C#.

Если бы это был просто метод, вы бы добавили к нему общий параметр:

public VisibleObjectContainer<T> GetController<T>() where T : VisibleObject { ... }


Но поскольку вы также используете поле, вам, вероятно, понадобится универсальный класс, чтобы содержать его:
public class MyContainer<T> where T : VisibleObject
{
    private VisibleObjectController<T> controller;
    
    public VisibleObjectController<T> GetController()
    {
        return controller;
    }
}


Возможно, если бы вы могли обновить свой вопрос более подробной информацией о том, как вы используете getController может быть, кто-нибудь сумеет придумать другое предложение.

EADever

Я хочу использовать эти вызовы функций и переменные внутри класса VisibleObject.

1 Ответов

Рейтинг:
1

Ehsan Sajjad

Вам нужно создать универсальный метод, так же как вы сделали это в объявлении класса с помощью где ключевое слово с Т в следующем синтаксисе:

private VisibleObjectController<t> controller;
 
    public VisibleObjectController<t> getController<t>() where t : VisibleObject {
        return controller;
    }


EADever

'private VisibleObjectController< t & gt; controller;' have error: t не существует и функция getController< t> () не может вернуться к контроллеру

Ehsan Sajjad

определен ли код в вашем общем абстрактном классе выше?

EADever

я имею в виду эти вызовы функций и переменные, используемые из другого класса, а не в VisibleObjectController.
например, нужно использовать в публичном абстрактном классе VisibleObject.

Ehsan Sajjad

Этот метод может находиться в не универсальном классе, но поле не может