繁体   English   中英

F#中的F#通用成员约束是否可能?

[英]Are F#'s generic member constraints possible within C#?

F#允许约束类型成员的泛型类型,类似于:

    type ClassWithMemberConstraint<'T when 'T : (static member StaticProperty : unit)> =
    class end

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

有没有办法在C#中表达这种行为?

因为F#允许这样的约束,我猜它意味着CLR也允许通用成员约束

抱歉不行。 可以说,F#成员约束是在“IL之外”实现的。 具有成员约束的函数不会编译到IL方法中,而是存储在程序集中的F#元数据中。 然后,每次调用这样的函数时,其代码都在调用站点内联,其泛型类型专用于该特定位置使用的内容。 这就是为什么具有成员约束的所有函数必须标记为inline的顺序。

好吧,将F#约束C #约束进行比较我们可以看到C#中没有F# Explicit Member Constraint的等价物。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM