我基本上希望做的是設計一個通用接口,該接口在實現時會生成一個類似T的類,除了它具有一些附加功能。下面是什麼我談論的例子:C#接口:是否可以引用在接口本身內實現接口的類型?
public interface ICoolInterface<T>
{
T Value { get; set; }
T DoSomethingCool();
}
public class CoolInt : ICoolInterface<int>
{
private int _value;
public CoolInt(int value)
{
_value = value;
}
public int Value
{
get { return _value; }
set { _value = value; }
}
public int DoSomethingCool()
{
return _value * _value;
// Ok, so that wasn't THAT cool
}
}
這是一個好主意,但爲了使用CoolInt,我需要做這樣的事情:
CoolInt myCoolInt = new CoolInt(5);
int myInt = myCoolInt.Value;
我至少在分配方面,CoolInt的工作原理與int相同。換句話說:
CoolInt myCoolInt = 5;
int myInt = myCoolInt;
要做到這一點,我添加了這兩個轉換操作符來我CoolInt類:
public static implicit operator CoolInt(int val)
{
return new CoolInt(val);
}
public static implicit operator int(CoolInt obj)
{
return obj.Value;
}
工程赫然。現在,如果我可以將這兩個過載添加到接口,我更喜歡它,以便接口的實施者強制來實現這些操作符。問題是,這些操作員的原型直接指向CoolInt。
對於隱式定義或尚未定義的事物,C#有很多「佔位符」名稱。常規編程中常用的T就是一個例子。我想在Properties中使用的value關鍵字是另一個關鍵字。這個「參考」可以被認爲是另一個參考。我希望我的界面中可以使用另一個符號來表示「正在實現此界面的類的類型」,例如, 「實施者」。
public static implicit operator implementer(int val)
{
return new IntVal(val);
}
public static implicit operator int(implementer obj)
{
return obj.Value;
}
這可能嗎?
是的,運算符重載有時不起作用,這很奇怪:在我發佈在這裏的抽象通用示例中,它似乎只能以一種方式工作,而不能以另一種方式工作! – 2010-07-25 19:41:26