public class myA
{
public void dosomething()
{
.......这里想访问_myb01的str ,也就是"abc";
}
}
public class myB
{
public string str1="abc";
public myA _mya = new myA();
}
myB _myb01 = new myB();
_myb01._mya.dosomething(这里想访问_myb01的str ,也就是"abc");///
这个可以解决吗?
-----------------------------
2016/10/28更新,
public class myA
{
public void dosomething(myB _b)这里加个myB类型的参数。
{
.......这里想访问_myb01的str ,也就是"abc";
}
}
这个方法知道。
仅仅是想从技术上学习这个东西,
也可能又有一个myC
public class myC
{
public string str1="myC的abc";
public myA _mya = new myA();
}
myC_myc01 = new myC();
_myc01._mya.dosomething(这里想访问_myc01的str ,也就是"myC的abc");///
想表达的意思是:
如果这个_mya就是纯粹的myA,就执行他自己的东西;
如果是“隶属于某类”的时候,例如存在于myB,和myC时,这个myA的实例是否可以判断他自己有么有上级(是否可以判断,是纯粹的myA,还是隶属于myB或者myC),并是否可以获取上一级的东西?
补充表达的意思,如下图:
@Daniel Cai: 非常感谢,这个我理解;
现实的实际是:
1. myA.dosomething(参数1,参数2)是写数据库。这个是可以独立运行的。
2. myB时,myB._mya.dosomething(参数1,参数2),写数据库。
3. myC时,myC._mya.dosomething(参数1,参数2),写数据库。
那么这3次的执行,在数据库中写入了3条一模一样的数据。我就不知道是myA执行的,还是myB,myC执行的。
当然,我已经重写了其他逻辑,现实的问题已经解决;
只是想学习,在不完全重新写这些逻辑的情况下,我能否区分是myA执行的,还是myB,myC执行的。
非常感谢。
1.可以正常访问,这个你看下访问修饰符。
2.没看明白你所谓的“隶属于某类”是个什么意思?是指对象中某些成员包含其他对象?还是说对象之间的派生关系?
我想表达的如下图,多谢
@BruceZhou:
提个接口
IFoo
{
void DoSth();
}
class A:IFoo
{
public void DoSth()
{
...//this is call from a;
}
class B:IFoo
{
public void DoSth()
{
..//this is b;
}
}
class C:IFoo
{
public void DoSth()
{
..//this is from c;
}
}
}
....
IFoo foo=new A();..//new B() or new C()
foo.DoSth();
@Daniel Cai: 非常感谢,这个我理解;
现实的实际是:
1. myA.dosomething(参数1,参数2)是写数据库。这个是可以独立运行的。
2. myB时,myB._mya.dosomething(参数1,参数2),写数据库。
3. myC时,myC._mya.dosomething(参数1,参数2),写数据库。
那么这3次的执行,在数据库中写入了3条一模一样的数据。我就不知道是myA执行的,还是myB,myC执行的。
当然,我已经重写了其他逻辑,现实的问题已经解决;
只是想学习,在不完全重新写这些逻辑的情况下,我能否区分是myA执行的,还是myB,myC执行的。
非常感谢。
@BruceZhou: 你不觉得你这块的设计有点怪么?a和b交叉引用这种很不好,而且根据你的代码,不管是哪个,最后都是执行的myA.dosth。
@Daniel Cai: 非常感谢。
是有些怪,现实中,myA相当于旧系统。myB,myC相当于遇到了新问题,或者升级新加了东西。
在现实中,我已经重构了myA,myB,myC,解决了实际问题,重新设计了系统逻辑。
现在只是钻了牛角尖,想学习一下。
非常感谢
@BruceZhou: 两种做法,一种就是让b从a派生,override掉里面的方法实现。
另一种是用bridge模式化解掉对a的依赖,然后将b,c改进去。
@Daniel Cai: 非常感谢,我试试看。
之所以想学习这个问题,是因为,myA,在现实中还是比较复杂的。并且已经运行。
我虽然重构解决了问题,但3人将近一周的时间才完全搞定新旧系统。
如果后续还遇到类似问题,完全重构当然是最容易的(虽然浪费时间、人力,但是最直接和容易的),如果还有其他方法解决,岂不是更好。
@BruceZhou: 技术债务不是可以找到投机的办法解决的。你这里可以做个评估,在改造力度成本和老系统维护成本中找个平衡点,渐进式完成“偷梁换柱”的过程。推倒从来往往不是最好的办法,只是看起来漂亮,但实际只是把一个已知的头疼的问题换成了一个未知的问题而已。
@Daniel Cai: 非常感谢
对极了,
@Daniel Cai:
我马上把设计模式在重温一遍,哈哈
方法很多,传递个参数获取myB对象都可以
非常感谢,想从技术上学习这个问题。
或者说,这种想法是错误的,还是可以解决,还是死胡同?
可以解决的
@园友,你好!
近期编码中遇到类似的问题,是通过其他方法解决的,绕过了上述的逻辑关系;
---
昨晚在地铁上,突然想到了这个问题,这个也不叫嵌套类;是否有其他的专属名词,实例成员什么的。
程序员,你懂得,这个思维就定在这里啦。半夜都没有休息好。
请教怎么解决?