C #: Как я могу использовать отражение для приведения объекта? - PullRequest
0 голосов
/ 14 февраля 2011
public static void myMethod(Object myObject)
{

}

Мой объект относится к типу SportCar. Как я могу создать новый объект (как-то так)

SportCart sportCar = myObject as SportCar

Позднее редактирование: я не знаю, какой тип myObject. Это может быть SimpleCar, AbcCar и т. Д.

Ответы [ 3 ]

4 голосов
/ 14 февраля 2011

Обычно вы используете интерфейс.В вашем случае myMethod должен делать что-то конкретное с переданным аргументом. Давайте рассмотрим простой пример;скажем, myMethod был ответственен за запуск автомобиля, вы должны определить интерфейс, такой как

public interface ICar
{
    void Start()
}

Тогда аргумент myMethod будет иметь тип ICar, а не object.

public void myMethod(ICar car)
{
   car.Start();
}

Теперь mymethod не нужно знать (или заботиться !!), что представлено ICar, будь то AbcCar, SportsCar и т. Д., Пока этот класс реализует ICar

public class SportsCar : ICar
{
   public void Start() 
   {
      Console.WriteLine("Vroom Vroom. SportsCar has started");
   }
}

public class AbcCar : ICar
{
   public void Start() 
   {
      Console.WriteLine("Chug Chug. AbcCar has started");
   }
}
1 голос
/ 14 февраля 2011

Звучит так, будто вы хотите одну из двух вещей.Либо есть базовый класс Car, либо интерфейс ICar, который имеет все общее поведение, которое имеют автомобили, и затем вы можете сделать:

ICar car = myObjectAsCar;
car.Drive(Speed.VeryFast);

Или вы хотите делать разные вещи, в зависимости от типа автомобиля.это:

if (SportCar sporty = myObject as SportCar)
{
     sporty.Drive(Speed.VeryFast);
}
if (HybridCar hybrid = myObject as HybridCar)
{
     hybrid.Drive(Speed.Economical);
}
0 голосов
/ 14 февраля 2011

Есть ли у классов автомобилей общий тип, и вы просто хотите привести его к этому, т.е.

BaseCar baseCar = myObject as BaseCar;

Или вы пытаетесь сначала исследовать тип, а затем приводить его к правильному типу, т. Е .:

if(myObject is SimpleCar)
{
  var simpleCar = myObject as SimpleCar;
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...