我面临在我的基类上创建一个静态方法的要求,但不喜欢我必须声明类型参数,所以我想知道我是否以正确的方式去做。
基本上,我正在分配我将与类上的属性相关联的代表。我可以轻松地将方法放在继承的类上,如下所示:
public class Foo
{
public string Property1 { get; set; }
}
public class InheritsFoo : Foo
{
public void AssignDel<TVal>(
Expression<Func<InheritsFoo, TVal>> expr,
Action<InheritsFoo, TVal> action)
{
}
}
或者,在扩展类中,我可以这样做:
public static void AssignDel<T, TVal>(
this T source,
Expression<T, TVal>> expression,
Action<T, TVal> action)
where T : Foo
{
}
这两个都可以让我AssignDel
在实例化类中使用:
var foo = new InheritsFoo();
foo.AssignDel(x => x.Property1, handler);
但我有一个要求,使AssignDel
静态。这使得这样做的扩展方式毫无用处。它仍然适用InheritsFoo
,但我真的很想把它移到基类中。如果我尝试,则无法推断泛型参数,我必须更改方法的用法:
InheritsFoo.AssignDel<InheritsFoo, string>(x => x.Property1, handler);
这里有没有办法,另一种我没有想到的方法?
编辑:为了解决关于扩展方法是否/应该工作的评论中的问题......我去了@Mark M引用的网址。事实证明,如果我这样写......
InheritsFoo foo = null;
foo.AssignDel(x => x.Property1, handler);
编译(虽然不知道它是否会运行)。不过,不要认为这符合使用静态方法的条件,因为 'foo' 仍然被认为是一个实例;一个空实例,但仍然是一个实例。