.net 无法访问公共常量?

djp7away  于 2023-03-04  发布在  .NET
关注(0)|答案(1)|浏览(117)

我有一个类Port,表示端口号的最小值和最大值限制。

public class Port
{
    public const int MinPortNumber = 1025;
    public const int MaxPortNumber = ushort.MaxValue;

    private readonly int _portNumber;

    private Port(int portNumber)
    {
        _portNumber = portNumber;
    }

    public static implicit operator int(Port port) => port._portNumber;
    public override string ToString() => $"{_portNumber}";

    public static Port FromNumber(int portNumber)
    {
        Validate(portNumber);
        return new Port(portNumber);
    }
    
    private static void Validate(int port)
    {
        if (port is < MinPortNumber or > MaxPortNumber)
            throw PortRangeException.NotInRange(port, MinPortNumber, MaxPortNumber);
    }
}

我试图从另一个项目访问其值,但在构建时收到编译错误[CS1061]:

public class ServiceViewModel
{
    public ServiceViewModel()
    {
        _port = Port.MinPortNumber;
    }

    [ObservableProperty]
    private int _port;
}

我在相同的项目中访问了此常量,如

if ((int)(service.Port) is < Port.MinPortNumber or > Port.MaxPortNumber) {}

而且确实奏效了。
那么,为什么编译器不允许我在这种情况下访问这个常量呢?

p8h8hvxi

p8h8hvxi1#

是我的错。
私有字段[ObservableProperty] private int _port;生成Port属性,所以它隐藏了Port类。
解决方案是重命名此字段并重新生成属性。

[ObservableProperty] private int _portNumber = Port.MinPortNumber;

相关问题