Мне нужно набросать немного фоновой информации для контекста. Пожалуйста, потерпите меня, и я постараюсь максимально упростить свой вопрос:
У меня есть один объект, который наследуется от другого объекта. Мы назовем первый объект Fruit, а второй Apple. Итак, я объявил Apple следующим образом:
public class Apple : Fruit
{
public string appleType;
public string orchardLocation;
// etc.
}
И объект Фрукты выглядит следующим образом:
public class Fruit
{
public int fruitID;
public int price;
// etc.
}
Так что Apple наследует от Fruit. И скажем, у меня есть ряд других видов фруктов, которые все наследуют от фруктов: банан, апельсин, манго и т. Д.
В моем приложении я сохраняю возможность хранить фрукты определенного типа в сеансе в качестве объекта этого типа, поэтому у меня может быть объект Apple или объект Banana. И у меня есть метод, который будет извлекать текущий Fruit из сессии, записанный следующим образом:
protected Fruit GetModel(int fruitID)
{
// code to retrieve the fruit from the Session
// fruitID could be the ID for an Apple or Banana, etc.
}
Иногда мне нужно извлечь фрукт из Сессии, обновить что-то об этом, а затем загрузить его обратно в Сессию. Я могу сделать это так:
Apple myApple = (Apple)GetModel(fruitID);
myApple.orchardLocation = "Baugers";
UpdateModel(myApple); // just overwrites the current fruit in the Session
Теперь мой вопрос. Я нахожусь в точке, где мне нужно извлечь объект из сеанса, обновить что-то определенное для самого фрукта (скажем, цену), а затем загрузить этот же объект обратно в сеанс. До сих пор я всегда знал тип объекта, поэтому в моем случае сейчас - если бы я знал тип фрукта - я мог бы просто сказать:
Apple myApple = (Apple)GetModel(fruitID);
myApple.price = "4";
UpdateModel(myApple);
Но на этот раз я пытаюсь сделать его более общим для самого Плода и не всегда знаю тип ребенка. И если я попытаюсь просто вытащить сам объект Fruit из сеанса (без приведения), обновить его и загрузить обратно, я сейчас только что потерял свой дочерний объект (Apple) и в объекте только есть объект Fruit. Поэтому мне нужен способ, как правило, создать новый экземпляр типа объекта в сеансе, обновить его, а затем загрузить его обратно.
Мне известен метод .NET для Object с именем GetType (), который возвращает System.Type того типа объекта, к которому вы его вызываете, при условии, что этот объект наследуется от Object. Но я не смог далеко продвинуться в этом, и я бы предпочел, чтобы Fruit не наследовал от Object.
Итак, я закончу псевдокодовой версией того, что мне нужно:
public updateModelPrice(int price, fruitID)
{
FigureOutType fruit = (FigureOutType)GetModel(fruitID);
fruit.price = price;
UpdateModel(fruit);
}
Любая помощь будет принята с благодарностью. Спасибо.