c# - 扩展通用分部类
问题描述
我的问题可能看起来很奇怪。
我使用一个类来封装一个方法,不必构建一个接口的类(解释有点长,我不想走得太远)。
我想知道是否可以通过将部分添加到“扩展”其通用部分来“扩展”通用类。目的是保持同名类,但通过添加一个(或将来更多)泛型类型来封装任何方法,然后传递包含该函数和包含此接口的对象。
我需要:
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
“扩展” 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,并且在编译时我没有与类名相关的错误。
如果我很好理解,将泛型参数添加到类的事实使得创建的类与“变体”一样多,具体取决于泛型类型。“部分”对于在基本类的多个文件上拆分代码很有用。
对于具有相同数量的泛型类型的代码拆分,部分是否有用?
解决方案
你不需要partial
用一个泛型类型来扩展一个类来拥有两个泛型类型。它们实际上是两个不同的类别。
这工作正常:
class Foo<T>
{
}
class Foo<T, Y> : Foo<Y>
{
}
现在,正如评论中所说,您的其余代码非常不稳定。如果您可以清理代码,我可以为您提供更多对您有用的答案。
推荐阅读
- python - 索引中的 NumPy 布尔数组
- reactjs - 对象 ID 的猫鼬数组仅包含最后插入的值
- google-apps-script - 谷歌表格正在寻找像 VLOOKUP 这样的谷歌脚本,但会结合找到的值并将它们加入特定的单元格
- vba - 无法在 VBA 循环中的 Excel 电子表格中插入单行
- servlets - Servlet 404 请求的资源 [/ServletDemo/AddServlet] 不可用
- python - 是否有必要在 python 的虚拟环境中安装 Requests 库?
- android - 按下按钮 5 秒后执行操作
- python - 如何获取所有子字符串的所有子字符串和所有字符排列?
- firebase - 从 dart 中的 Cloud_Firestore 获取布尔状态
- excel - 如何在 VBA 中输出每次迭代的结果集?