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

时间:2016-01-16 02:45:39

标签: c# syntax

我确定之前已经问过这个问题,但我找不到我需要的答案。

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

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

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

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

这真的让我感兴趣。您理论上可以创建一个变量(或其他),并且程序集应该能够根据上下文和范围确定您要引用的变量。如果我要说:(伪代码)

create int number
create need.int number

或者如果我做了类似的事情:

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

程序集应该没有问题,根据上下文或范围确定我想要创建的类型。唯一的问题是IDE似乎没有使用正确的范围,也不会让我构建。

我试过,真的,need.true,this.true等都无济于事。

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

我们如何做到这一点?

P.S。这些属性的原因是我基本上可以让它们只读。如果您可以告诉我如何将它们放在内部结构中并且只读,那么可以获得奖励......

1 个答案:

答案 0 :(得分:1)

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

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; } }