我想为类名创建一个别名.以下语法将是完美的:
public class LongClassNameOrOneThatContainsVersionsOrDomainSpecificName { ... } public class MyName = LongClassNameOrOneThatContainsVersionOrDomainSpecificName;
但它不会编译.
注意此示例仅供参考.不要试图通过建议改变整个系统的设计来解决这个特殊问题.此示例的存在或缺乏不会改变原始问题.
一些现有代码依赖于静态类的存在:
public static class ColorScheme { ... }
此配色方案是Outlook 2003配色方案.我想介绍一个Outlook 2007配色方案,同时保留Outlook 2003配色方案:
public static class Outlook2003ColorScheme { ... } public static class Outlook2007ColorScheme { ... }
但我仍然面临这样一个事实,即代码依赖于名为ColorScheme的静态类的存在.我的第一个想法是创建一个ColorScheme类,我将从Outlook2003或Outlook2007下载:
public static class ColorScheme : Outlook2007ColorScheme { }
但你不能从静态类下降.
我的下一个想法是创建静态ColorScheme类,但使Outlook2003ColorScheme和Outlook2007ColorScheme类非静态.然后静态ColorScheme类中的静态变量可以指向"true"颜色方案:
public static class ColorScheme { private static CustomColorScheme = new Outlook2007ColorScheme(); ... } private class CustomColorScheme { ... } private class Outlook2008ColorScheme : CustomColorScheme { ... } private class Outlook2003ColorScheme : CustomColorScheme { ... }
但这需要我将一个由只读静态颜色组成的类转换为可覆盖的属性,然后我的ColorScheme类需要将30个不同的属性getter thunk down到包含的对象中.
打字太多了.
所以我的下一个想法是给这个类别名:
public static ColorScheme = Outlook2007ColorScheme;
但那不编译.
我如何将静态类别名改为另一个名称?
更新:有人可以添加答案"你不能在C#中做到这一点",所以我可以将其标记为已接受的答案.任何想要回答相同问题的人都会发现这个问题,接受的答案以及可能会或可能不会有用的一些变通方法.
我只想关闭这个问题.
如果更改原始类名,则可以使用导入别名作为typedef
替代来重写从属代码:
using ColorScheme = The.Fully.Qualified.Namespace.Outlook2007ColorScheme;
这必须放在文件/命名空间的顶部,就像常规的using
s一样.
不过,我不知道这是否适用于你的情况.
您可以通过添加以下代码行为您的类创建别名:
using Outlook2007ColorScheme = YourNameSpace.ColorScheme;
你需要一个(工厂 | 单身),这取决于你的要求.前提是使客户端代码不必知道它获得的颜色方案.如果配色方案应该是应用程序范围的,单身就应该没问题.如果您可以在不同的情况下使用不同的方案,那么工厂模式可能就是您的选择.无论哪种方式,当颜色方案需要改变时,代码只需要在一个地方改变.
public interface ColorScheme { Color TitleBar { get; } Color Background{ get; } ... } public static class ColorSchemeFactory { private static ColorScheme scheme = new Outlook2007ColorScheme(); public static ColorScheme GetColorScheme() { //Add applicable arguments return scheme; } } public class Outlook2003ColorScheme: ColorScheme { public Color TitleBar { get { return Color.LightBlue; } } public Color Background { get { return Color.Gray; } } } public class Outlook2007ColorScheme: ColorScheme { public Color TitleBar { get { return Color.Blue; } } public Color Background { get { return Color.White; } } }
您不能在C#中为类名别名.
有些事情你可以做的不是在C#中别名类名.
但回答最初的问题:你不能在C#中为别名命名别名.
更新:人们很困惑为什么using
不工作.例:
Form1.cs的
private void button1_Click(object sender, EventArgs e) { this.BackColor = ColorScheme.ApplyColorScheme(this.BackColor); }
ColorScheme.cs
class ColorScheme { public static Color ApplyColorScheme(Color c) { ... } }
一切正常.现在我想创建一个新类,并为它创建别名 ColorScheme
(这样就不需要修改代码):
ColorScheme.cs
using ColorScheme = Outlook2007ColorScheme; class Outlook2007ColorScheme { public static Color ApplyColorScheme(Color c) { ... } }
哦,对不起.此代码无法编译:
我的问题是如何别名在C#中的一类.它无法完成.我可以做的事情不是在C#中别名类名:
改变大家谁依赖于ColorScheme
以using
ColorScheme
代替(代码变化的解决方法,因为我无法别名)
改变依赖于ColorScheme
使用工厂模式的每个人他们的多态类或接口(代码更改解决方法因为我不能别名)
但这些变通办法涉及破坏现有代码:不是一种选择.
如果人们依赖于ColorScheme
类的存在,我必须实际复制/粘贴一个ColorScheme
类.
换句话说:我不能在C#中为类名别名.
这与其他面向对象语言形成对比,我可以在其中定义别名:
ColorScheme = Outlook2007ColorScheme
我会完成的.
试试这个:
using ColorScheme=[fully qualified].Outlook2007ColorScheme