Свойство ReadOnly С#

Я хочу иметь свойство readonly в объекте передачи данных, объекте DTO, без набора; Аксессуар вроде:

public class ViewBannerDTO { public int Id { get; } }

но зачем:

'ViewBannerDTO.Id.get' должен объявить тело, потому что оно не отмечено абстрактным или внешним. Автоматически реализованные свойства должны определять как get, так и set accessors.

и почему я не могу:

public readonly int Id{get;}
3 ответа

У вас не может быть сеттера для автоматически реализованного свойства (иначе как вы его установите?). Вы можете либо добавить реализацию геттера (и, при необходимости, поле поддержки), либо использовать private сеттер:

public class ViewBannerDTO
{ public int Id { get; private set; }
}

Почему я не могу это сделать:

<pre class="prettyprint linenums">public readonly int Id{get;} </pre>

потому что readonly применим только к полям. Вы можете выполнить одно и то же с использованием свойства, используя поле для readonly в режиме readonly и не set accessor:

private readonly int _Id;
public int Id {get { return _Id; } }

но вы не можете иметь свойство readonly auto-implement, потому что нет синтаксиса для инициализации свойства без набора доступа.


Это всего лишь повторение ответов, но OP не понимает

public class ViewBannerDTO
{ public int Id { get; private set; } public ViewBannerDTO () { Id = 12; // inside the class can assign private // private not seen outside the classs }
}

или вы могли бы

public class ViewBannerDTO
{ private int id = 12; public int Id { get { return id; } }
}

или вы могли бы

public class ViewBannerDTO
{ public int Id { get { return 12; }
}


Это именно то, что является sais: для этой переменной не установлен аксессор, и у вас нет метода Get, который может сделать что-то, чтобы получить вам значение.

Или идите:

public int Id { get; set; }

ИЛИ

public int Id { get { int something = GetStuffDone(); return something; } }

Еще одно, что вы можете сделать, это сделать функцию set private такой:

public int Id { get; private set; }

И ответ на вопрос, почему вы не можете: значение никогда не будет установлено, потому что у него нет доступа.

licensed under cc by-sa 3.0 with attribution.