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

Еще один способ сделать запрос:

  select * from [dbo].[receive_scans]
  where [record_created]  <   dateadd(hour,-6,GETDATE())
.
9
задан mattruma 19 February 2009 в 12:28
поделиться

5 ответов

Я пошел бы для этого:

public Guid ItemId
{
    get;
    private set; // can omit as of C# 6 
}

public TransactionItem()
{
    this.ItemId = Guid.Empty;
}

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

По-моему, вещи как свойства только для чтения, главным образом важны при наблюдении с внешней стороны. С внутренней части действительно не имеет значения, каково это, причина там, Вы - Король =)

32
ответ дан 4 December 2019 в 06:19
поделиться

Можно использовать ключевое слово только для чтения

public readonly Guid ItemId;

public TransactionItem()
{
    this.ItemId = Guid.Empty;
}
2
ответ дан 4 December 2019 в 06:19
поделиться

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

Если Вам нужно ItemId чтобы быть только для чтения в самом классе затем, необходимо будет сделать что-то вроде этого:

private readonly Guid _ItemId
public Guid ItemId
{
    get { return _ItemId; }
}

public TransactionItem()
{
    _ItemId = Guid.Empty;
}
4
ответ дан 4 December 2019 в 06:19
поделиться

Использовать частный метод set или установить отступающее поле?
(Но, затем необходимо удостовериться, что название поля поддержки может быть определено на основе имени свойства.
Например, путем проверки, что поле поддержки всегда имеет то же имя как имя свойства, но снабжается префиксом подчеркивание; как NHibernate он с помощью его стратегий доступа).

0
ответ дан 4 December 2019 в 06:19
поделиться

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

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

Только, чтобы подробно остановиться, что я имею в виду, я хотел бы смочь сделать:

// Not valid in C# - yet!
public class Foo
{
    // Autogenerated field would be readonly in IL.
    public string Name { get; readonly set; }

    public Foo (string name)
    {
        this.Name = name;
    }

    public void Bar()
    {
        // This would be invalid
        this.Name = "No!";
    }
}

В основном это было бы, "делают свойство как поле только для чтения".

2
ответ дан 4 December 2019 в 06:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: