Jak inni sugerują, można iść albo sposób rozszerzenie metod lub wzoru drogę Dekorator.
Należy jednak wziąć pod uwagę, że kolor ma wiele właściwości i metod, więc przekierowanie ich wszystkich z klasy dekoratora do zapakowanej struktury koloru będzie oznaczało napisanie wielu elementów. Jeśli pójdziesz tą drogą, jednak można rzeczywiście określić operatorów, a nawet niejawne konwersje z twojej klasy na kolor i na odwrót (tak, że można z nich korzystać więcej zamiennie), podobnie jak to:
public class MyColor {
public System.Drawing.Color val;
public MyColor(System.Drawing.Color color)
{
this.val = color;
}
public static MyColor AliceBlue
{
get {
return new MyColor(System.Drawing.Color.AliceBlue);
}
}
public override string ToString()
{
return val.ToString();
}
// .... and so on....
// User-defined conversion from MyColor to Color
public static implicit operator System.Drawing.Color(MyColor c)
{
return c.val;
}
// User-defined conversion from Color to MyColor
public static implicit operator MyColor(System.Drawing.Color c)
{
return new MyColor(c);
}
}
przetestować :
MyColor c = System.Drawing.Color.AliceBlue; // assigning a Color to a MyColor
// thanks to the implicit conversion
Console.WriteLine(c.ToString()); // writes "Color [AliceBlue]"
Nie jestem pewien, czy da się to zrobić, ale jestem bardzo ciekawy, jaki byłby efekt "czerwono-niebieskiego"? – n8wrl
@ n8wrl: Naprawdę dziwne, ale spodziewałbym się, że '-' usunie dowolne wartości RGB, które ma kolor z drugiej. – Yuck
@ n8wrl cokolwiek jest przeciwieństwem fioletu, prawdopodobnie :-) –