我有一个辅助类,它只是一堆静态方法,并且想要辅助类的子类.某些行为是独特的,具体取决于子类,所以我想从基类调用虚方法,但由于所有方法都是静态的,我无法创建普通的虚方法(需要对象引用才能访问虚方法).
有没有办法解决?我想我可以使用单例.. HelperClass.Instance.HelperMethod()并不比HelperClass.HelperMethod()差.布朗尼指出任何可以指出支持虚拟静态方法的语言的人.
编辑:好的,我疯了.谷歌搜索结果让我觉得我不是那里的.
为什么C#(或.NET)不允许我们在接口中放置静态/共享方法?
看似从这里重复.但我的想法有点不同,我只是想为我的插件(接口)添加一个帮助器
不应该C#至少允许这个想法吗?
namespace MycComponent
{
public interface ITaskPlugin : ITaskInfo
{
string Description { get; }
string MenuTree { get; }
string MenuCaption { get; }
void ShowTask(Form parentForm);
void ShowTask(Form parentForm, Dictionary<string, object> pkColumns);
ShowTaskNewDelegate ShowTaskNew { set; get; }
ShowTaskOpenDelegate ShowTaskOpen { set; get; }
// would not compile with this:
public static Dictionary<string, ITaskPlugin> GetPlugins(string directory)
{
var l = new Dictionary<string, ITaskPlugin>();
foreach (string file in Directory.GetFiles(directory))
{
var fileInfo = new FileInfo(file); …Run Code Online (Sandbox Code Playgroud) 编辑:显然这是不可能的,因为C#不允许接口中的静态方法.
显然,为您自己的解决方案实现以下接口会相当简单
public interface IParsable<T>
{
T Parse(string s);
}
public interface ITryParsable<T> : IParsable<T>
{
bool TryParse(string s, out T output);
}
Run Code Online (Sandbox Code Playgroud)
已经写解析未知类型化的用户输入数据的各种方式,我会发现有int,decimal等,等实现一个版本,这些接口必不可少的.
对我而言,包含在System命名空间中似乎是一件相当明显的事情.
显然事实并非如此.那么查看类是否"实现"这些接口的最佳方法是什么?
通过Duck Typing检查方法是否存在似乎是一个明智的选择,但是反射并不是非常高效.
由于我们无法在接口中定义公共静态方法,这样的接口是否可以在具有public static的类中实现?
public interface IValidator
{
bool IsValid(bool data);
}
public class MyValidator : IValidator
{
public static bool IsValid(string data)
{
//code which returns bool
}
}
Run Code Online (Sandbox Code Playgroud)