通用约束:强制类型具有带参数的静态函数和构造函数

发布于 2024-11-05 18:40:37 字数 581 浏览 0 评论 0 原文

我知道你可以写:

class GenericClass<T> where T : new()
{ 

}

强制 T 有一个空的构造函数。

我的问题是:

  1. 你能强制T有一个带有特定类型参数的构造函数吗?喜欢:

    class SingletonFactoryWithEmptyConstructor;其中 T : new(int)
    
  2. 您可以强制 T 具有静态函数(比方说,void F()),以便您可以在泛型类中使用此函数吗?喜欢:

    class GenericClass;其中 T : void F()
    { 
       无效 G ()
       {
           TF();
       }
    }
    

    我知道您可以指定 T 实现一个接口,但我不希望这样做。我想指定 T 有一个静态函数。

I know you can write:

class GenericClass<T> where T : new()
{ 

}

to enforce that T has an empty constructor.

My Qs are :

  1. can you enforce that T has a constructor with a specific type of parameter? Like:

    class SingletonFactoryWithEmptyConstructor<T> where T : new(int)
    
  2. can you enforce that T has a static function (let's say, void F()) so that you can use this function inside the generic class? Like :

    class GenericClass<T> where T : void F()
    { 
       void G ()
       {
           T.F();
       }
    }
    

    I know you can specify that T implements an interface but I don't want that. I want to specify that T has a static function.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

爱已欠费 2024-11-12 18:40:37

不,C# 中没有这样的东西。

我之前建议 “静态接口” 可以相当简洁地表达这一点。它们对于泛型类型约束有用(无论如何,我怀疑),但是你可以表达:

  • 具有任意参数的构造函数
  • 静态方法和属性
  • 运算符

在我看来,最后一点特别有趣,允许使用合适的加法和除法运算符对数字类型使用通用“平均”方法。

我相信 MS 的一些人也考虑过类似的事情,但我还没有听到任何表明他们正在积极研究的消息。

No, there's nothing like this in C#.

I've previously suggested that "static interfaces" could express this reasonably neatly. They'd only be useful for generic type constraints (I suspect, anyway) but then you could express:

  • Constructors with arbitrary parameters
  • Static methods and properties
  • Operators

The last of these points is particularly interesting in my view, allowing things like a generic "Average" method over numeric types with suitable addition and division operators.

I believe some folks at MS have thought about something similar, but I haven't heard anything to suggest they're actively working on it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文