在C#中使用@keyword - 坏主意?

时间:2010-04-08 05:49:38

标签: c# .net naming-conventions keyword

在我的命名约定中,我使用_name作为私有成员变量。我注意到如果我使用ReSharper自动生成构造函数,如果该成员是关键字,它将生成一个转义关键字。例如:

class IntrinsicFunctionCall
{
    private Parameter[] _params;
    public IntrinsicFunctionCall(Parameter[] @params)
    {
        _params = @params;
    }
}

这通常被认为是不好的做法还是可以的?它经常发生在@params和@interface上。

编辑:这实际上并没有为变量名添加前缀。如果从不同的.NET语言(即F#)访问该变量,它将只是params。事实上,在C#中,如果你写@x,它就完全等同于x

3 个答案:

答案 0 :(得分:6)

使用语言关键字作为标识符会影响可读性。当然,正确的语法高闪电有点帮助,但最好不要只依赖编辑器功能。

考虑以下(夸张地说不可读,显然:-))代码:

interface IInterfaceFactory<T>
{
   T CreateInstance(params object[] @params);
}

class SomeClass
{
    IMyOtherInterface _interface;

    public IMyOtherInterface Interface
    {
        get { return _interface; }
    }

    public SomeClass(params object[] @params)
    {
        SomeInterface<IMyOtherInterface> interfaceFactory = new SomeInterface<IMyOtherInterface>();
        IMyOtherInterface @interface = interfaceFactory.CreateInstance(@params);
        if (@interface->IsValid())
        {
            _interface = @interface;
        }
        else
        {
            _interface = interfaceFactory.CreateInstance();
        }
    }
}

答案 1 :(得分:0)

通常不是很糟糕的做法。如果您更喜欢使用某些变量的前缀,那就没关系。据我所知,除了接口名称之外,Microsoft建议不要使用前缀。

答案 2 :(得分:0)

这取决于您的个人品味,但您需要保持所有代码的风格一致。

这是代码一致性的示例,在此过程中使用相同的样式。

int @number;
string @name;

这可能会考虑错误的代码,使用混合风格。

int @number;
string _name;