Como otros sugirieron, puede ir de cualquier manera el métodos de extensión o la forma Decorator.
Sin embargo, tenga en cuenta que Color tiene un buen número de propiedades y métodos, por lo que redirigirlos a todos desde la clase de decorador a su estructura de Color envuelta significará escribir muchos textos repetidos. Si ir por ese camino, sin embargo, puede de hecho definir operadores y conversiones incluso implícitas de su clase a color y al revés (para que pueda utilizarlos más intercambiable), así:
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);
}
}
para poner a prueba :
MyColor c = System.Drawing.Color.AliceBlue; // assigning a Color to a MyColor
// thanks to the implicit conversion
Console.WriteLine(c.ToString()); // writes "Color [AliceBlue]"
No estoy seguro de si esto se puede hacer, pero tengo mucha curiosidad sobre cuál sería el resultado de 'rojo - azul'? – n8wrl
@ n8wrl: Es extraño, pero esperaba que '-' eliminara los valores RGB que ese color tenga del otro. – Yuck
@ n8wrl sea lo contrario de la púrpura, presumiblemente :-) –