c# - 如何通过泛型方法调用数据成员的方法
问题描述
考虑到以下课程,我希望能够编写:
B b = new B();
b.f(1); // calls b._a.f(int)
b.f("howdy!"); // calls b._a.f(string)
A类不能修改。
public class A
{
public void f(int i) { }
public void f(string s) { }
}
public class B
{
public void f<T>(T v)
{
_a.f(v); // fails
}
A _a = new A();
}
解决方案
如果您真的想将f
传递简化为单个方法,则必须使用运行时类型检查。我没有看到任何其他方式。泛型在这里不起作用。
public void f(object v)
{
if (v is int i)
_a.f(i);
else if (v is string s)
_a.f(s);
else
throw new InvalidOperationException();
}
我知道您不愿公开_a
,因为上面有一些方法您不希望调用者可以访问?您能否介绍一个接口,或者将其视为对 class 的修改A
?
public interface IFoo
{
void f(int i);
void f(string s);
}
public class A : IFoo
{
...
}
public class B
{
public IFoo A => _a;
}
推荐阅读
- python - VSCode 笔记本静默显示失败(modify_doc)
- perl - 在 Perl 中读取动态生成的文件行的最佳方法是什么?
- android - 如何在 Android TextView 中准确阅读更多内容?
- django - 在for循环中保存模型时,如何将图像保存在django的媒体文件夹中?
- node.js - Socket.IO:“UnhandledPromiseRejectionWarning:错误:广播时不支持回调”
- flutter - 将属性路径映射为函数参数
- c# - Game of Life Parallel.For 循环无法正常工作
- c - 如何在 printf 中使用条件运算符但没有“else”部分?
- azure - 如何将 Blob 生命周期规则添加到 ARM 模板
- apache-kafka - 具有高突变频率的 Debezium 效率