Как добавить свойство для представления имени образца, которое нельзя изменить после инициализации? - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь сделать недвижимость в своем классе.Что мне нужно сделать, если после инициализации свойства его нельзя изменить?

Это действительные инструкции:

Создайте класс в существующем пространстве имен, либо в существующем файле кода, либо в новом файле, чтобы представить сумму в фунтах образца грязи.,В этом классе (а) не создавать конструкторы.(б) унаследовать класс песка (чтобы использовать свойство песка). (c) добавить свойство для представления имени образца.Это свойство не может быть изменено после инициализации. (d) добавьте свойство для представления и обработки назначений количества глины с минимальным значением 0. (e) добавьте методы для возврата веса образца, процентапеска в образце и процент глины в образце.

Я нахожусь на части (с).Я пытался исключить сеттеров.Затем я попытался использовать только для чтения, но он не может работать, потому что мой класс не может иметь конструкторов.

public class AmountSand //parent class
    {
    public class AmountSand {
 private double quantity;
 public double Sand {

  get {
   return quantity;
  }
  set {
   if (value >= 0) quantity = value;
  }
 }
}

public class AmountDirt: AmountSand { //part (b): inherited the parent class, AmountSand
  private string name = null;
  private double clay;

  public string Name { //here is where the specific property starts
   get {
    return name;
   }
   set {
    if (name == null)
     name = value;
   }
  } //ends

  public double Clay {
   get {
    return clay;
   }
   set {
    if (value >= 0) clay = value;
   }
  }

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

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

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

0 голосов
/ 08 февраля 2019

Зависит от того, где вы хотите, чтобы он был инициализирован.

РЕДАКТИРОВАТЬ: извините, я не читал, что ваш класс может иметь ctors, но я сохраню это для полноты.Кажется странным, что ваш класс не может иметь ctors.Могу я спросить почему?

Из ctor:

class MyClass
{
    public MyClass()
    {
        Name = "Muhammed";
    }

    public MyClass(string newName)
    {
        Name = newName;
    }

    public string Name{get;}
}

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

if(string.IsNullOrEmpty(Name))

вместо сравнения с нулем.

, если вы хотите, чтобы он был установлен из метода внутри вашего класса:

public string Name{get; private set;}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...