在C#中是否可以使用F#的通用成员约束?

ylj*_*jet 7 .net c# generics f# .net-core

F#允许在类型的成员上约束通用类型,类似于:

    type ClassWithMemberConstraint<'T when 'T : (static member StaticProperty : unit)> =
    class end
Run Code Online (Sandbox Code Playgroud)

这可能非常方便,尤其是因为CLR不允许使用静态成员定义接口。因为F#允许这样的约束,所以我猜这意味着CLR也允许通用成员约束,但是据我所知,这在C#中是不可能的。

有什么方法可以在C#中表达这种行为?

Mag*_*ron 2

好吧,将F# 约束C# 约束进行比较,我们可以看到 C# 中没有与 F#显式成员约束等效的东西。

您可以做的就是定义一个抽象类并对其进行约束,因此您的类必须继承自该抽象类。但请注意,继承的类将使用父抽象类的相同静态对象。