передавая в качестве параметра объект, производный от класса в C # - PullRequest
2 голосов
/ 22 июля 2011

Как вы все знаете, используя java, можно создавать методы, которые требуют один или несколько объектов, расширенных из другого класса;чтобы сделать это, вы должны написать:

public void method(Class<? extends class_name> Object_name)

Мне было интересно, есть ли соответствующее утверждение в C #.Кто-нибудь знает?

Ответы [ 4 ]

1 голос
/ 22 июля 2011

вы можете сделать подпись вашего метода универсальной и использовать ограничение

например:

public static ObjectB GetObjectBFromInterface<T>(T item) where T : IObject
{
    //Do some stuff
}

см. здесь для получения дополнительной информации об ограничениях универсального типа

1 голос
/ 22 июля 2011

Ну, это принимает тип вместо объекта , но вы можете сделать что-то немного похожее с универсальными методами в C #:

public void Foo<T>() where T : MyClass

Тогда вы можете использовать typeof(T) в методе.

Если вам нужно указать фактический объект , совместимый с типом T, вы можете иметь его в качестве обычного параметра метода типа T.

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

0 голосов
/ 22 июля 2011

Я не кодировал в Java много лет, поэтому я не знаком с конструкцией <? extends, однако, я думаю, вы спрашиваете, как передать интерфейс или абстрактный класс методу.

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

public void Method(BaseClass baseClassParamName) 
{
   baseClassParamName.HasAccessToMethodsDefinedInTheBase();
}
0 голосов
/ 22 июля 2011

Вы можете написать универсальный метод и использовать ограничение параметра типа :

public void Method<T>(T obj) where T : YourBaseClass
{
    // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...