Это не ясно, будет ли вы имеете в виду:
- Вложение одного класса в другом
- Имея два класса верхнего уровня в пределах одного исходного файла
последнего почти всегда плохая идея - класс 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; } }
}
Вы не размещаете другой класс внутри своего основного класса ... у вас просто есть другое объявление класса в том же файле. – BoltClock
Вы не добавили класс в свой основной класс в примере кода? Я предполагаю, что вы можете иметь несколько классов в 1 файле? Это не имеет значения, если это так. – AndrewC