c# - 当使用实例从 A 类调用 calss B 时,如何从 B 类访问在 A 类中创建的 C 类的实例
问题描述
我有 3 个类,分别是 A 类和 B 类以及 C 类。我的 A 类正在创建 B 类和 C 类的实例,并正在调用 B 类方法和 C 类方法。现在我需要从 B 类方法访问在 A 类中创建的 C 类实例,而无需创建 C 类的新实例。
Class A
{
B b = new B();
C c = new C();
c.MethodC();
b.MethodB();
}
Class B
{
MethodB()
{
//some functionality implemented
// Here i need to access instance c created in class A
}
}
Class C
{
MethodC()
{
// comman logic for validation
}
}
任何人都可以帮助我了解上述逻辑。
解决方案
你可以 ...
添加C
to的参数MethodB
:(不要,实际上但可能)
void MethodB(C c){c.MethodC();}
它具有引入依赖项的缺点:B
“知道”C
不可取的类。
或添加Action
to的参数MethodB
:
void MethodB( Action a ) { a(); }
并这样称呼:
// in a Method in A
b.MethodB(() => c.MethodC());
或者您可以使用接口:
public interface ICommonValidationLogic{
public void Validate();
}
class C : ICommonValidationLogic
{
public override void Validate(){
// Do your thing
}
}
class B
{
public void MethodB( ICommonValidationLogic v )
{
// v here is actually the instance of C created in A
v.Validate();
}
}
class A
{
void SomeMethodOfA()
{
B b = new B();
ICommonValidationLogic c = new C();
b.MethodB(c);
}
}
推荐阅读
- eclipse - Ubnutu:在 Eclipse IDE 中安装 lombok 显示错误“无法写入目录”,即使使用 sudo
- javascript - 如何在类组件中重用具有布尔状态的函数
- mdriven - 在多数据库租户 Web 应用程序中访问模型类的派生属性时出现问题
- mysql - 为什么对于 SQLCOM_UPDATE_MULTI,它用 lock_s (INNODB) 锁定其他表
- excel - 在 Excel 中记录更改(谁勾选了复选框、什么时间等)
- python - 如何访问kivymd主类中不同类的ID?
- python - 'numpy.float64' 对象不能被解释为整数,并且在 Python 中进行 ODE 求解
- zfs - Zpool 导入 - 一台或多台设备当前不可用
- xpath - Telegram 的即时视图:无法加载 .webp 和 .ico 图像
- python-3.x - 异常后继续 - Python