首页 新闻 赞助 找找看

C# 成员是其他类示例,访问拥有它的类的其他成员的问题

0
悬赏园豆:10 [已解决问题] 解决于 2016-10-28 11:52

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执行的。

非常感谢。

BruceZhou的主页 BruceZhou | 菜鸟二级 | 园豆:317
提问于:2016-10-28 00:01
< >
分享
最佳答案
0

1.可以正常访问,这个你看下访问修饰符。

2.没看明白你所谓的“隶属于某类”是个什么意思?是指对象中某些成员包含其他对象?还是说对象之间的派生关系?

 

收获园豆:10
Daniel Cai | 专家六级 |园豆:10424 | 2016-10-28 10:08

我想表达的如下图,多谢

BruceZhou | 园豆:317 (菜鸟二级) | 2016-10-28 10:24

@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 | 园豆:10424 (专家六级) | 2016-10-28 10:31

@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 | 园豆:317 (菜鸟二级) | 2016-10-28 10:43

@BruceZhou: 你不觉得你这块的设计有点怪么?a和b交叉引用这种很不好,而且根据你的代码,不管是哪个,最后都是执行的myA.dosth。

Daniel Cai | 园豆:10424 (专家六级) | 2016-10-28 10:49

@Daniel Cai: 非常感谢。

是有些怪,现实中,myA相当于旧系统。myB,myC相当于遇到了新问题,或者升级新加了东西。

在现实中,我已经重构了myA,myB,myC,解决了实际问题,重新设计了系统逻辑。

 

现在只是钻了牛角尖,想学习一下。

 

非常感谢

BruceZhou | 园豆:317 (菜鸟二级) | 2016-10-28 10:54

@BruceZhou: 两种做法,一种就是让b从a派生,override掉里面的方法实现。

另一种是用bridge模式化解掉对a的依赖,然后将b,c改进去。

Daniel Cai | 园豆:10424 (专家六级) | 2016-10-28 11:10

@Daniel Cai: 非常感谢,我试试看。

之所以想学习这个问题,是因为,myA,在现实中还是比较复杂的。并且已经运行。

我虽然重构解决了问题,但3人将近一周的时间才完全搞定新旧系统。

如果后续还遇到类似问题,完全重构当然是最容易的(虽然浪费时间、人力,但是最直接和容易的),如果还有其他方法解决,岂不是更好。

BruceZhou | 园豆:317 (菜鸟二级) | 2016-10-28 11:18

@BruceZhou: 技术债务不是可以找到投机的办法解决的。你这里可以做个评估,在改造力度成本和老系统维护成本中找个平衡点,渐进式完成“偷梁换柱”的过程。推倒从来往往不是最好的办法,只是看起来漂亮,但实际只是把一个已知的头疼的问题换成了一个未知的问题而已。

Daniel Cai | 园豆:10424 (专家六级) | 2016-10-28 11:30

@Daniel Cai: 非常感谢

对极了,

BruceZhou | 园豆:317 (菜鸟二级) | 2016-10-28 11:47

@Daniel Cai: 

我马上把设计模式在重温一遍,哈哈

BruceZhou | 园豆:317 (菜鸟二级) | 2016-10-28 11:50
其他回答(2)
0

方法很多,传递个参数获取myB对象都可以

2012 | 园豆:21228 (高人七级) | 2016-10-28 08:27

非常感谢,想从技术上学习这个问题。

或者说,这种想法是错误的,还是可以解决,还是死胡同?

支持(0) 反对(0) BruceZhou | 园豆:317 (菜鸟二级) | 2016-10-28 10:00
0

可以解决的

复返 | 园豆:215 (菜鸟二级) | 2016-10-28 09:53

 @园友,你好!

近期编码中遇到类似的问题,是通过其他方法解决的,绕过了上述的逻辑关系;

---

昨晚在地铁上,突然想到了这个问题,这个也不叫嵌套类;是否有其他的专属名词,实例成员什么的。

程序员,你懂得,这个思维就定在这里啦。半夜都没有休息好。

 

请教怎么解决?

支持(0) 反对(0) BruceZhou | 园豆:317 (菜鸟二级) | 2016-10-28 10:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册