Ответ 1
В этом проблема:
private OdbcConnection db { get; private set; }
Предполагая, что вы действительно хотите, чтобы и getter, и setter были закрытыми, это должно быть:
private OdbcConnection db { get; set; }
Установщик уже private
, так как это доступность общего свойства.
В качестве альтернативы, если вы хотите, чтобы геттер не был закрыт, а сеттер был закрытым, вам нужно указать какой-либо другой модификатор, например.
internal OdbcConnection db { get; set; }
В принципе, если вы укажете модификатор доступа в части свойства get;
или set;
свойства, он должен быть более строгим, чем в противном случае.
Из раздела 10.7.2 спецификации С#:
Модификатор-модификатор должен объявить доступность, которая является строго более ограничительной, чем объявленная доступность самого свойства или индексатора. Если быть точным:
- Если свойство или индекс имеет объявленную доступность
public
, модификатор-модификатор может быть либоprotected internal
,internal
,protected
, либоprivate
.- Если свойство или индекс имеет объявленную доступность
protected internal
, модификатор-модификатор может быть либоinternal
,protected
, либоprivate
.- Если свойство или индекс имеет объявленную доступность
internal
илиprotected
, модификатор-модификатор должен бытьprivate
.- Если свойство или индексатор имеет объявленную доступность
private
, модификатор-модификатор не может быть использован.
(Как в стороне, если он частный для чтения и письма, вероятно, было бы лучше просто использовать поле. Большинство преимуществ использования свойства присутствуют только в том случае, если оно открыто за пределами текущего класса. И если вы сохраните его как свойство, подумайте над переименованием его, чтобы он соответствовал нормальным соглашениям об именах .NET.)