首页 > 解决方案 > 扩展通用分部类

问题描述

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

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

我想知道是否可以通过将部分添加到“扩展”其通用部分来“扩展”通用类。目的是保持同名类,但通过添加一个(或将来更多)泛型类型来封装任何方法,然后传递包含该函数和包含此接口的对象。

我需要:

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

我认为我“成功”了这个,但也许它会产生一些我现在无法想象的错误,或者它可能不是......如何说一个好的编程方式。

例子:

    // A class to encapsulate a method "without parameter"
    partial Foo<T>: Interface
    {
        public Func<Interface, T> FooLambda{ get; set; }
      
        public virtual object Run()
        {
            return ToRun(this);
        }
    }

我需要传递的方法(来自另一个类)

        void FooToEncapsulate(Interface patt)
        {
            //--- My code using an object with the interface pattern
        }

“扩展” Foo 的部分

    partial Foo<T,Y>: Foo<Y>
    {
        public new Func<Interface, T, Y> FooLambda{ get; set; }
      
        public T Param {get;set;}  

        public override object Run()
        {
            return this.ToRun(this, Param);  
        }
    }

我需要传递的另一种方法(来自另一个类)

        void FooToEncaspulate(Interface patt, int param)
        {
            //--- My code using an object with the interface pattern
            //--- and "param"
    
        }

这段代码我暂时没有问题,而且我知道这可能很奇怪,我必须忘记使用这种技术,还是我认为它也可以这样工作?我必须认为如果它编译就意味着它没问题吗?有没有另一种方法可以在不创建新类的情况下继续进行,并在通用部分同时扩展?

(对不起我的英语不好)

谢谢。



编辑:

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

如果我很好理解,将泛型参数添加到类的事实使得创建的类与“变体”一样多,具体取决于泛型类型。“部分”对于在基本类的多个文件上拆分代码很有用。

对于具有相同数量的泛型类型的代码拆分,部分是否有用?

标签: c#.net-core-3.1

解决方案


你不需要partial用一个泛型类型来扩展一个类来拥有两个泛型类型。它们实际上是两个不同的类别。

这工作正常:

class Foo<T>
{

}

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

}

现在,正如评论中所说,您的其余代码非常不稳定。如果您可以清理代码,我可以为您提供更多对您有用的答案。


推荐阅读