C# 扩展泛型分部类

C# 扩展泛型分部类,c#,.net-core-3.1,C#,.net Core 3.1,我的问题可能看起来很奇怪 我使用一个类来封装一个方法,这样就不必构建接口类(解释起来有点长,我不想走得太远) 我想知道是否可以通过添加partial来“扩展”泛型类的泛型部分来“扩展”泛型类。这样做的目的是保留相同的名称类,但通过添加一个(将来可能会添加多个)泛型类型来封装任何方法,然后传递包含函数和包含此接口的对象 我需要: new Foo<string>() new Foo<string, int>() ... 向Foo添加另一个泛型类型

我的问题可能看起来很奇怪

我使用一个类来封装一个方法,这样就不必构建接口类(解释起来有点长,我不想走得太远)

我想知道是否可以通过添加partial来“扩展”泛型类的泛型部分来“扩展”泛型类。这样做的目的是保留相同的名称类,但通过添加一个(将来可能会添加多个)泛型类型来封装任何方法,然后传递包含函数和包含此接口的对象

我需要:

    new Foo<string>()
    new Foo<string, int>()
    ...

  • 向Foo添加另一个泛型类型
“扩展”Foo的部分

部分Foo:Foo
{
公共新函数{get;set;}
公共T参数{get;set;}
公共重写对象运行()
{
返回this.ToRun(this,Param);
}
}
我需要通过的其他方法(来自另一个类)

我对这段代码暂时没有问题,我知道这可能很奇怪,我必须忘记使用这项技术,或者我可以认为它也像这样工作吗?我必须认为,如果它编译,这意味着它是好的吗?有没有其他方法可以像这样继续而不创建新类,并在泛型部分上同时进行扩展

(对不起我的英语)

Thx



编辑:

我认为使用partial可能是个好主意,因为我希望我的类保持相同的名称。在阅读了Enigmativity的答案和评论后,我尝试了不带部分的,并且在编译时没有与类名相关的错误

如果我能很好地理解的话,将泛型参数添加到一个类中的事实会使它创建的类比根据泛型类型创建的“变体”多。“Partial”对于在一个基本类上拆分多个文件上的代码很有用


在使用相同数量的泛型类型进行代码拆分时,Is partial是否有用?

您不需要使用单词
partial
来扩展具有单个泛型类型的类,使其具有两个泛型类型。它们实际上是两个截然不同的类别

这很好:

class Foo<T>
{

}

class Foo<T, Y> : Foo<Y>
{

}
class-Foo
{
}
Foo类:Foo
{
}

现在,正如评论中所说,您的代码的其余部分相当脆弱。如果你能清理代码,我可以为你提供一个更有用的答案。

通过添加partial扩展一个泛型类
不,这不是
partial
所做的。它没有扩展任何内容。它只是一个文件管理功能。您的代码包含两个不同的类,它们完全不受
partial
的影响。可以将类、结构、接口或方法的定义拆分为两个或多个源文件。每个源文件都包含类型或方法定义的一部分,在编译应用程序时,所有部分都会合并在一起<代码>部分与继承或泛型无关,不会影响them@Vonkel. - 你的代码很不稳定-我想你不是想在那里玩
doumbda
,而是想在那里玩
doumbda
?但是您的第二个类不起作用,因为您似乎正在尝试将第二个参数传递给
ToRun
。您还调用了此参数
Param
,但显示的唯一变量是
timeSleep
。你能不能把这一切整理一下,使代码尽可能接近真实?然后我们可以给你一个明确的答案。对不起,神秘性,你是对的,我会尽可能地清理以给出一个清晰的示例,但我忘记了删除它。我认为现在可以了,我删除了'timesleep',添加了'Param',添加了Y参数到Dougambda。对不起,对我来说太晚了,我写东西的时候错过了很多东西。如果你想知道我的目的是什么,我也不明白,我很感激你回答我的方式,当你说会有两个不同的类,你的意思是因为我添加了泛型类型?为了这个确切的案子?如果是这样的话,我理解,甚至我也理解为什么在这种情况下,部分可能是无用的。@Vonkel.-给定类的名称和泛型参数的数量,类是唯一的
Foo
Foo
是唯一的类型。与
Foo
(它没有通用参数)相同。Thx,这是我以前从未遇到过的情况。在您的回答之后,我想到了可以使用不同参数并保持相同名称的方法,并且理解它一定与此相近。
        void FooToEncaspulate(Interface patt, int param)
        {
            //--- My code using an object with the interface pattern
            //--- and "param"
    
        }
class Foo<T>
{

}

class Foo<T, Y> : Foo<Y>
{

}