accessor must be more restrictive than the property or indexer

This is the problem:

private OdbcConnection db { get; private set; }

Assuming you really want both the getter and setter to be private, this should be:

private OdbcConnection db { get; set; }

The setter is already private, as that’s the accessibility of the overall property.

Alternatively, if you want the getter to be non-private and the setter to be private, you need to specify some other modifier, e.g.

internal OdbcConnection db { get; set; }

Basically, if you’re going to specify an access modifier on the get; or set; part of a property, it has to be more restrictive than it would otherwise be.

From section 10.7.2 of the C# specification:

The accessor-modifier must declare an accessibility that is strictly more restrictive than the declared accessibility of the property or indexer itself. To be precise:

  • If the property or indexer has a declared accessibility of public, the accessor-modifier may be either protected internal, internal, protected, or private.
  • If the property or indexer has a declared accessibility of protected internal, the accessor-modifier may be either internal, protected, or private.
  • If the property or indexer has a declared accessibility of internal or protected, the accessor-modifier must be private.
  • If the property or indexer has a declared accessibility of private, no accessor-modifier may be used.

(As an aside, if it’s private for both reading and writing, it would probably be better just to use a field. Most of the benefits of using a property are only present if it’s exposed beyond the current class. And if you do keep it as a property, consider renaming it to follow normal .NET naming conventions.)

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)