【发布时间】:2013-12-09 14:16:58
【问题描述】:
编辑:显然这是不可能的C# does not allow static methods in interfaces。
显然,为您自己的解决方案实现以下接口相当简单
public interface IParsable<T>
{
T Parse(string s);
}
public interface ITryParsable<T> : IParsable<T>
{
bool TryParse(string s, out T output);
}
一直在编写解析未知类型用户输入数据的各种方法,我会发现让int、decimal 等实现这些接口的一个版本是必不可少的。
对我来说,将其包含在 System 命名空间中似乎是一件相当明显的事情。
显然情况并非如此。那么查看一个类是否“实现”这些接口的最佳方法是什么?
通过Duck Typing 检查该方法是否存在似乎是一个明智的选择,但反射的性能并不是非常好。
【问题讨论】:
-
“解决这个问题的最佳方法是什么?” - 如果“this”是基类库中缺少的接口,那么您别无选择手动编写界面。你能试着解释你的实际问题吗?我想您有某种类型的变量,并且您想尝试将其解析为任何其他类型并查看哪个有效?
-
那些是静态方法(它们创建一个实例,那么你会在哪个实例上调用它们?)。接口只支持实例方法。
-
@CodesInChaos D'oh。好点。
-
“但反射的性能并不是非常好。” - 通过一些缓存,它非常快。我写了such a caching parser
-
@CodesInChaos 谢谢,看起来不错。 此刻感觉很愚蠢(现在是星期一)。
标签: c#