Я думаю, вам нужно понять, как instance1
, а затем и property1
будут созданы, и создавать их только таким образом, чтобы они не могли быть нулевыми. Обычно это делается путем проверки аргументов при построении, например ::100100
public instance1(string property1)
{
if (property1 == null) throw new ArgumentNullException("property1");
this.property1 = property1;
}
Если вы создаете ваши типы таким образом, что они не могут существовать в недопустимом состоянии, вы гарантируете, что ваш зависимый код не будет переброшен на значения null
.
В противном случае нам понадобится более полный пример того, что вы делаете, чтобы дать вам более конкретный совет.
Еще одна вещь, которую следует учитывать, это то, в каком состоянии может существовать ваш класс, в котором обязательное состояние операции, в отличие от необязательного состояния операции. То, что члены обязаны для работы вашего класса, и вы должны постараться спроектировать свои классы так, чтобы они всегда имели требуемое состояние, например ::11017*
public class Person
{
public Person(string forename, string surname)
{
if (forename == null) throw new ArgumentNullException("forename");
if (surname == null) throw new ArgumentNullException("surname");
Forename = forename;
Surname = surname;
}
public string Forename { get; private set; }
public string Surname { get; private set; }
}
В моем примере типа мне требуется, чтобы мои значения Forename
и Surname
имели ненулевое значение. Это реализуется через мой конструктор ... мой тип Person
никогда не может быть создан с нулевыми значениями (хотя, возможно, пустые значения так же плохи, поэтому проверка IsNullOrWhiteSpace
и выдача соответствующего ArgumentException
- это маршрут, но позволяет будь проще).
Если бы я ввел необязательное поле 1028 *, я бы позволил ему изменять состояние моего экземпляра Person
, например, присвоив ему установщик:
public class Person
{
public Person(string forename, string surname)
{
if (forename == null) throw new ArgumentNullException("forename");
if (surname == null) throw new ArgumentNullException("surname");
Forename = forename;
Surname = surname;
}
public string Forename { get; private set; }
public string Surname { get; private set; }
public string Initial { get; set; }
}
Мой тип Person
все еще вводит обязательные поля для работы, но вводит необязательное поле. Затем я должен принять это во внимание при выполнении операции, которая использует эти элементы:
public override ToString()
{
return Forename + (Initial == null ? String.Empty : " " + Initial) + " " + Surname;
}
(хотя это не самый лучший пример ToString
).