我可以为自己的类(如int、string、object)定义C#别名/关键字吗

本文关键字:定义 别名 关键字 object string 自己的 int 我可以 | 更新日期: 2024-07-27 10:57:27

关于using foo = MyPackage.Foo;不是

我意识到这更多地与IDE(VisualStudio2010)有关,IDE以蓝色显示了特殊类型。我希望我的一些课程也能做到这一点。我想要蓝色(以特殊形式呈现),并且可以在整个项目中访问

原因是我想赋予它们意义/重要性,这样我团队中的每个人都知道这个类是整个项目的关键类。

// "foo" and "Foo" shall be just the same type:
foo:     MyPackage.Foo
object:  System.Object
string:  System.String
bool:    System.Boolean
byte:    System.Byte
sbyte:   System.SByte
short:   System.Int16
ushort:  System.UInt16
int:     System.Int32
uint:    System.UInt32
long:    System.Int64
ulong:   System.UInt64
float:   System.Single
double:  System.Double
decimal: System.Decimal
char:    System.Char

这可能吗?如果在我的IDE安装中有一个文件,里面会有上面的关键字,我可以添加一些关键字到它并保存它,然后重新启动IDE?

有两个班做同样的事情,我可以这样做。这将是同一类的两个名称。我知道我需要在两者之间做出选择。

public class foo : Foo
{ }

我可以为自己的类(如int、string、object)定义C#别名/关键字吗

如果要为此类定义关键字(如intvoid),则C#不支持该关键字。关键字是预定义的、保留的标识符,只有对编译器进行更改才能实现您的意图。

最接近的方法是指定一个类/命名空间别名,如@Soner Gönül所示。然而,由于这适用于单个文件,您必须将其预先包含在每个项目文件中,如本文所述。

现在,关键字由IDE着色,因为它们关键字(从某种意义上说,它们在IDE的语法高亮显示引擎中被列为C#语言的关键字)。根据您使用的IDE,您可能可以为该类添加一个标识符,使其看起来像关键字。但是,您仍然需要在每个文件中为它导入一个别名,否则编译器将无法识别它

您的问题似乎是关于两个不同的需求:

  1. 定义一个"全局"符号/类,随处可见
  2. 为该符号应用不同的颜色(即语法高亮显示)

1) 不可能。在这种情况下,您可以提供一个包含该类的程序集,并强制您的团队使用它。您甚至可以使用静态分析工具并触发一些编译错误(例如,如果未引用该程序集)。

2) 这更难实施。在Visual Studio中自定义C#的默认语法着色机制是可能的,但绝对不容易。

Visual studio通过语言服务支持给定的语言(包括语法高亮显示、IntelliSense等)。因此,按照以下步骤添加一组自定义的关键字,并使用不同的调色板是可行的。您还必须了解如何将自定义代码插入到已经定义的C#语言服务中。

附言:我从来没有试过那样做,我只是看着那些似乎需要的工作就累了。但我想JetBrains ReSharper团队就是这么做的。

PPS:如果你使用托管C++而不是C#,它会简单得多。

你看起来像using directive吗?

using foo = MyPackage.MyClass;

EDITusing指令仅适用于命名空间类型。你在找什么我听上去不太可能,但我一直在找。。

真正实现这一点的唯一方法是创建一个引用到项目中的程序集(如果不需要外部程序集,则只在项目中创建一个类)。

在您的程序集中,您可以删除名称空间,并只使用一个类(如以下所示):

public class mytype    
{
    public void DoSomething()
    {
    }
}
public class MyType : mytype
{
}

如果同时想要大小写类,只需继承基类即可。

然后在您的应用程序中,一旦您将其添加为引用,您就可以访问它:

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            mytype my_type = new mytype();
            my_type.DoSomething();
            MyType my_Type = new MyType();
            my_Type.DoSomething();
        }
    }
}

当然,颜色将是标准的类颜色,但至少可以访问您在整个项目中定义的自定义"类型"。

希望这能引导你朝着正确的方向前进。

你不能做你想做的事情;例如,字符串是C#语言中System.string的别名;不可能添加到别名列表中,因为这将涉及修改语言。