2016-03-02 8 views
2

простой вопрос о DTO, у меня есть класс класса DTO и некоторые другие подклассы моделей автомобилей внутри него.Один класс DTO с несколькими классами внутри

public class Cars 
{ 
    public Ferrari FerrariModel { get; set; } 
    public Porshe PorsheModel {get; set; } 
    public Mustang MustangModel { get; set; } 
} 
    public class Ferrari 
{ 
    public string collor{ get; set; } 
    public int year{ get; set; } 
    public double price{ get; set; } 
} 

и Porshe and Mustang - это точно такой же Ferrari. Проблема в том, что я не знаю, как действовать сейчас. Я пытаюсь что-то вроде этого

Cars cars = new Cars(); 
FerrariModel fm = new FerrariModel(); 
cars.FerrariModel.collor = txtCollor.Text; 

И это не работает, как я получаю сообщение об ошибке в последующей cars.FerrariModel.collor -> «Ссылка на объект не установлен пункт Экземпляр объекта гула декларацию объекта гул.» , Должен признаться, что я даже не знаю, что это возможно, или если я «изобретаю програминг», так что любая помощь может быть огромной.

  1. Почему использовать только один класс? Потому что необходимо передать один DTO в параметрах: save (Cars car); Обновление (Автомобили)
  2. , используя второй класс, который заставил меня «перегрузить» метод: save (Cars car); сохранить (Ferrari ferrari);
  3. , если я использую один класс (без Ferrari, Porshe и Mustang) работы программы, но у меня есть много переменных в моем InteliSense, более 50

Спасибо.

+0

код делает слишком много вещей, которые в конечном итоге разрыв ** [Single Ответственность Принцип] (https://en.wikipedia.org/wiki/Single_responsibility_principle) **. Если модели имеют схожие свойства, они могут наследоваться от ** интерфейса ** или ** абстрактного ** класса. Затем вы можете использовать ** Общий список **. – Win

+0

Спасибо, я все еще начинаю, и я мало знаю об интерфейсах и абстрактных классах. В последнее время я изучаю общие списки, и даже я использую этот метод точно так же, как объект передачи данных, что вы делаете «тяжелым»? Потому что я действительно не хочу иметь много методов для большого количества операций, которые делают почти то же самое. –

ответ

1

Вам необходимо назначить свой экземпляр fm на свой Cars.FerarriModel.

Cars cars = new Cars(); 
FerrariModel fm = new FerrariModel(); 
cars.FerrariModel = fm; 
cars.FerrariModel.collor = txtCollor.Text; 

Или даже просто:

Cars cars = new Cars(); 
cars.FerrariModel = new FerrariModel() { collor = txtCollor.Text }; 
+0

Чувак! Я просто не могу поверить, что это действительно сработало! Ха-ха, ты, парни, даже не поймешь «сумасшедший вопрос» ха-ха !!! Очень благодарю тебя! Я потратил много времени, чтобы сделать это, и я никогда не получу это в одиночку, действительно спасибо! –

+0

Нет проблем. Прочитайте ваши сообщения об исключениях - он сообщает вам, что одна из ваших ссылок не установлена. Это обычно указывает на закодированные утверждения (или ранее назначенные переменные), которые являются нулевыми (из-за того, что они еще не созданы). Кроме того, если вы можете получить информацию о своих деталях исключения в отладчике или журнале, вы увидите, что трассировка стека должна указывать прямо на оскорбительную строку кода. – Reddog