创建与关键字同名的属性名称

本文关键字:属性 关键字 创建 | 更新日期: 2023-09-27 18:30:45

我确定这个问题以前有人问过,但我找不到我需要的答案。

我正在使用 C# 创建一个程序集,其中一个结构名为 need。我正在尝试执行以下操作:

internal struct need {
    internal need how
    {
        get
        {
            return how;
        }
    }
    internal need true
    {
        get
        {
            return true;
        }
    }
}

我想创建一个名为 true 的新属性。显然,IDE 不喜欢这样,因为我正在尝试创建一个与关键字同名的属性。

显而易见的解决方法是将名称更改为其他名称,例如真理,但我的内心告诉我,这不是我应该做的。

这真的让我的兴趣达到了顶峰。理论上,你可以创建一个变量(或其他变量),程序集应该能够根据上下文和范围找出你引用的变量。如果我说这样的话:(伪代码)

create int number
create need.int number

或者如果我做了这样的事情:

create int number // In the want struct
create int number // In the need struct

程序集根据上下文或范围确定要创建哪种类型应该没有问题。唯一的问题是 IDE 似乎没有使用正确的范围,并且不允许我构建。

我已经尝试过,真的,需要.真,这个.真,等等都无济于事。

我确信让我的程序集确定它的"需要"结构中的"true"是什么对于它的功能是必不可少的,因为程序集需要能够在特定的范围和上下文中使用它自己的 true 类型,而不是语言或任何指定它的东西,指定它是什么。

我们如何做到这一点?

附言这些是属性的原因是,我基本上可以使它们只读。奖励积分,如果你能告诉我将它们放在内部结构中并且只读的方法......

创建与关键字同名的属性名称

您可以在关键字之前加上@前缀。

internal struct need
{
    // btw your properties will result in a infinit loop
    internal need how
    {
        get
        {
            return how;
        }
    }
    internal need @true
    {
        get
        {
            return @true;
        }
    }
}

编辑:

如果需要从该属性返回true,则必须实现一个implicit operator need(bool)

internal struct need
{
    internal need @true
    {
        get { return true; }
    }
    public static implicit operator need(bool value)
    {
        // todo: initialize it
        return new need();
    }
}

或者,更改返回类型:

internal bool @true { get { return true; } }