我可以为自己的类(如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
或void
),则C#不支持该关键字。关键字是预定义的、保留的标识符,只有对编译器进行更改才能实现您的意图。
最接近的方法是指定一个类/命名空间别名,如@Soner Gönül所示。然而,由于这适用于单个文件,您必须将其预先包含在每个项目文件中,如本文所述。
现在,关键字由IDE着色,因为它们是关键字(从某种意义上说,它们在IDE的语法高亮显示引擎中被列为C#语言的关键字)。根据您使用的IDE,您可能可以为该类添加一个标识符,使其看起来像关键字。但是,您仍然需要在每个文件中为它导入一个别名,否则编译器将无法识别它
您的问题似乎是关于两个不同的需求:
- 定义一个"全局"符号/类,随处可见
- 为该符号应用不同的颜色(即语法高亮显示)
1) 不可能。在这种情况下,您可以提供一个包含该类的程序集,并强制您的团队使用它。您甚至可以使用静态分析工具并触发一些编译错误(例如,如果未引用该程序集)。
2) 这更难实施。在Visual Studio中自定义C#的默认语法着色机制是可能的,但绝对不容易。
Visual studio通过语言服务支持给定的语言(包括语法高亮显示、IntelliSense等)。因此,按照以下步骤添加一组自定义的关键字,并使用不同的调色板是可行的。您还必须了解如何将自定义代码插入到已经定义的C#语言服务中。
附言:我从来没有试过那样做,我只是看着那些似乎需要的工作就累了。但我想JetBrains ReSharper团队就是这么做的。
PPS:如果你使用托管C++而不是C#,它会简单得多。
你看起来像using directive
吗?
using foo = MyPackage.MyClass;
EDIT:using
指令仅适用于命名空间或类型。你在找什么我听上去不太可能,但我一直在找。。
真正实现这一点的唯一方法是创建一个引用到项目中的程序集(如果不需要外部程序集,则只在项目中创建一个类)。
在您的程序集中,您可以删除名称空间,并只使用一个类(如以下所示):
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的别名;不可能添加到别名列表中,因为这将涉及修改语言。