Делать собственность обязательной - PullRequest
3 голосов
/ 30 марта 2011

Есть ли способ сделать свойство, определенное в классе, обязательным?
Я хочу, чтобы компилятор жаловался, если объект объявлен и используется без обязательного свойства.

Ответы [ 6 ]

6 голосов
/ 30 марта 2011

Лучшим подходом, я думаю, было бы не указывать конструктор по умолчанию.

public class MyClass
{
    public MyClass(string myProp)
    {
        MyProp = myProp;
    }

    public string MyProp { get; set; }
}
3 голосов
/ 30 марта 2011

Можно было бы реализовать конструктор, который заставляет создание объекта иметь начальное значение для свойства:

class Demo
{
    public int P {get; set;}

    Demo(int p)
    {
        P = p;
    }
}

Теперь клиент может создавать объект только путем передачи значения для p:

var d = new Demo(42);
3 голосов
/ 30 марта 2011

Нет, вы не можете заставить кого-то предоставлять информацию свойству.

Однако вы можете пойти по обычному маршруту и ​​заставить конструктора запрашивать информацию.Таким образом, объект не может быть построен без предоставления необходимой информации.

3 голосов
/ 30 марта 2011

Как насчет добавления в класс конструктора, который будет принимать значение для свойства?

public class MyClass 
{     
   public int Mandatory {get; set;}
   public int Optional {get; set;}

   public MyClass(int mandatory)
   {
      Mandatory = mandatory;
   }

   public MyClass(int mandatory, int optional)
   {
      Mandatory = mandatory;
      Optional = optional;
   }
}

Таким образом, экземпляр класса может быть создан с использованием конструктора с одним или двумя параметрами, поэтому пользовательнужно будет указать значение для свойства Mandatory.

MyClass x = new MyClass();   // does not compile
MyClass x = new MyClass(1);  //Mandatory = 1; Optional = 0 (default value)
MyClass x = new MyClass(1,2);//Mandatory = 1; Optional = 2
1 голос
/ 30 марта 2011

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

public YourClass(string value)
{
   YourCompulsaryProperty = value;
}

public string YourCompulsaryProperty{get; set;}
1 голос
/ 30 марта 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...