gpt4 book ai didi

c# - 访问器必须比属性或索引器更严格

转载 作者:IT王子 更新时间:2023-10-29 04:18:37 27 4
gpt4 key购买 nike

我有以下类(class):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Odbc;

namespace Framework
{
public class OracleProvider
{
private OdbcConnection db { get; private set; }
private String dbUsername = Settings.Default.Username;
private String dbPassword = Settings.Default.Password;

public OracleProvider()
{
connect();
}

public void connect()
{
db = new OdbcConnection("Driver={Microsoft ODBC for Oracle};Server=CTIR; UID="+dbUsername+";PWD="+dbPassword+";");
}
}
}

现在我得到以下错误:

Error 11: The accessibility modifier of the 'Framework.OracleProvider.db.set' accessor must be more restrictive than the property or indexer 'Framework.OracleProvider.db'

我一直在寻找类似的问题,但还没有真正找到答案。

谁能给我解释一下为什么会这样?我真的很想学习。

最佳答案

问题是:

private OdbcConnection db { get; private set; }

假设您真的希望 getter 和 setter 都是私有(private)的,这应该是:

private OdbcConnection db { get; set; }

setter 已经私有(private),因为这是整个属性的可访问性。

或者,如果您希望 getter 是非私有(private)的而 setter 是私有(private)的,您需要指定一些其他修饰符,例如

internal OdbcConnection db { get; set; }

基本上,如果您要在 get;set; 属性的一部分上指定访问修饰符,它必须比实际更严格否则就是。

来自 C# 规范的第 10.7.2 节:

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.

(顺便说一句,如果它对于读写都是私有(private)的,那么只使用一个字段可能会更好。使用属性的大部分好处只有在它暴露在当前类之外时才会出现。如果你确实将其保留为属性,考虑重命名它以遵循正常的 .NET 命名约定。)

关于c# - 访问器必须比属性或索引器更严格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22226718/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com