2011-09-21 3 views
0

Я слежу за мастерской, пока я изучаю C#.C#, классы внутри оригинального класса плохой практики программирования?

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

Я разработал это.

Мои вопросы ... ставит другие классы в основной класс плохой практикой программирования? Я полагаю, я бы спросил, прежде чем я начал делать привычки! Должен ли я просто создать отдельный класс, я хочу расширить его до фактического проекта?

class Exercise1 
{ 
    static void Main() 
    { 
     Character myCharacter = new Character(); 
     myCharacter.name = "tekaC"; 

     Console.WriteLine("Hello {0}!", myCharacter.name); //Prints the character's name into the Console output 
    } 
} 
class Character 
{ 
    public string name; 
} 
+2

Вы не размещаете другой класс внутри своего основного класса ... у вас просто есть другое объявление класса в том же файле. – BoltClock

+0

Вы не добавили класс в свой основной класс в примере кода? Я предполагаю, что вы можете иметь несколько классов в 1 файле? Это не имеет значения, если это так. – AndrewC

ответ

6

Это не ясно, будет ли вы имеете в виду:

  • Вложение одного класса в другом
  • Имея два класса верхнего уровня в пределах одного исходного файла

последнего почти всегда плохая идея - класс Foo должен быть всегда объявлен в Foo.cs, так что его легко найти. Там являются исключениями - например, в Noda Time У меня есть несколько делегатов, объявленных в одном файле с именем Delegates.cs, но это особый случай - никакого кода не было, и как только вы узнаете, что если вы хотите найти любого делегата, вы смотрите в Delegates.cs, все в порядке.

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

Еще один момент о вашем текущем коде: у вас есть общедоступное поле, которое обычно является плохим инкапсуляцией. Вместо этого вы должны использовать свойство, чтобы вы могли скрывать детали реализации. Вероятно, вы захотите присвоить классу Character конструктор, который также берет имя во время построения - тогда вы могли бы сделать основное поле readonly. Например:

// You may not want it to be internal, and you may not want it to be sealed - 
// but you should think about both decisions. 
internal sealed class Character 
{ 
    private readonly string name; 

    internal Character(string name) 
    { 
     if (name == null) 
     { 
      throw new ArgumentNullException("name"); 
     } 
     this.name = name; 
    } 

    internal string Name { get { return name; } } 
} 
+0

Я исправил отступ, и, похоже, он спрашивает о размещении нескольких классов в одном файле. – BoltClock

+0

+1; Я помещал несколько классов в один и тот же файл в течение многих лет, пока, наконец, не понял, как больно перемещаться по чужому коду ... –

+0

Спасибо за тонну за очень подробное объяснение! Думаю, мне нужно еще немного учиться! Очень ценится 8) Я предполагаю, добавив конструктор, вы имеете в виду такие вещи, как «статические»? – tekac

0

Вы не поместили класс в другой класс вообще! Вы просто поместили 2 класса в один файл, что действительно является личным предпочтением. (У меня есть файлы с 5-6 промежуточными классами edit: omg Jon Skeet не согласен со мной oh noez! :)).

Итак, в вашем примере у вас есть 2 класса.

0

Вы имеете в виду два класса в одном файле?

Один класс в файле обычно принимается за способ его выполнения, а на некоторых языках необходим.

Смежные вопросы