我基本上希望做的是设计一个通用接口,在实现时,会产生一个类似于T的类,除了它有一些额外的功能.这是我正在谈论的一个例子:
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
}
}
Run Code Online (Sandbox Code Playgroud)
这一切都很好,但为了使用CoolInt,我需要做这样的事情:
CoolInt myCoolInt = new CoolInt(5);
int myInt = myCoolInt.Value;
Run Code Online (Sandbox Code Playgroud)
至少在分配方面,我更倾向于CoolInt就像int一样工作.换一种说法:
CoolInt myCoolInt = 5;
int myInt = myCoolInt;
Run Code Online (Sandbox Code Playgroud)
为此,我将这两个转换运算符添加到我的CoolInt类中:
public static implicit operator CoolInt(int val)
{
return new CoolInt(val);
}
public static implicit operator int(CoolInt obj)
{
return obj.Value;
}
Run Code Online (Sandbox Code Playgroud)
工作得很棒.现在,如果我可以将这两个重载添加到接口,我更喜欢它,因此接口的实现者被迫实现这些运算符.问题是,这些运算符的原型直接引用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;
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?
| 归档时间: |
|
| 查看次数: |
290 次 |
| 最近记录: |