Вы не можете исказить имя класса в 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) { ... }
}
Ohh, я сожалею. Этот код не компилирует:
Мой вопрос состоял в том как к [1 114] псевдоним класс в C#. Это не может быть сделано. Существуют вещи, которые я могу сделать, которые являются не искажение имени класса в C#:
ColorScheme
к using
ColorScheme
вместо этого (обходное решение изменения кода, потому что я не могу исказить) ColorScheme
для использования шаблона "фабрика" их полиморфный класс или интерфейс (обходное решение изменения кода, потому что я не могу исказить) , Но эти обходные решения включают повреждающийся существующий код: не опция.
, Если люди зависят от присутствия ColorScheme
класс, я имею к на самом деле скопировать/вставить ColorScheme
класс.
, Другими словами: я не могу исказить имя класса в C#.
Это контрастирует с другими объектно-ориентированными языками, где я мог определить псевдоним:
ColorScheme = Outlook2007ColorScheme
и я был бы сделан.
При изменении исходного имени класса Вы могли бы переписать зависимый код с помощью псевдонима импорта в качестве typedef
замена:
using ColorScheme = The.Fully.Qualified.Namespace.Outlook2007ColorScheme;
Это должно пойти наверху файла/пространства имен, точно так же, как регулярный using
с.
я не знаю, практично ли это в Вашем случае, все же.
Можно сделать псевдоним для класса путем добавления этой строки кода:
using Outlook2007ColorScheme = YourNameSpace.ColorScheme;
Вы хотите ( Фабрика | Singleton), в зависимости от Ваших требований. Предпосылка должна сделать его так, чтобы клиентский код не знал, какую цветовую схему это получает. Если цветовая схема должна быть широким приложением, одиночный элемент должен быть прекрасным. Если можно использовать различную схему при различных обстоятельствах, Шаблон "фабрика" является, вероятно, способом пойти. Так или иначе, когда цветовая схема должна измениться, код только должен быть изменен в одном месте.
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; }
}
}
Действительно ли возможно измениться на использование интерфейса?
, Возможно, Вы могли создать IColorScheme
интерфейс, который реализуют все классы?
Это работало бы хорошо с шаблоном "фабрика" как показано Chris Marasti-Georg
попробуйте это:
using ColorScheme=[fully qualified].Outlook2007ColorScheme
В то время как функциональность, которую Вы просите, не существует, и мой ответ не отвечает на Ваш вопрос по сути, возможно оставить класс ColorScheme неповрежденным и метка с Устаревший атрибут, затем добавить другие два новых класса цветовой схемы.
Это не потребовало бы никаких системных изменений и сохраняет obsoleted класс изолированным.