结构设计问题,用什么方法能达到构造函数参数为this的目的

xloveme 2013-09-02 10:26:32
现在我遇到一个结构设计方面的问题,有人指点一下吗,谢谢!
不太会文字描述,我大概用下面这段代码来示意一下,这个能反映出我实际的需求,但是这段代码是有问题的。

有人会用正确的方法写了这个意思吗,谢谢!

(之所以这样设计,是因为 B 中希望访问到 A 中的一些方法,但是又不能 New A 或 Static A)

public class A
{
private B _b = new B(this); //问题出在了 this 这里。
public B B
{
get
{
return _b;
}
}
}
public class B
{
private A _a;
public B(A a)
{
_a = a;
}
}
...全文
103 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xloveme 2013-09-03
  • 打赏
  • 举报
回复
首先非常感谢 sp1234 给出的代码和良好的建议。 问题中之所以只把问题这个结点写出来而抛弃其他支叶,主要是怕说得太多无关紧要的东西,反倒把人弄晕了,所以才在提问时只针对问题所在作了描述。 现在夜深了,上面的代码,我明天人清醒时再测试。 既然说了那么多,我也就把我完整的需求说出来,不知道 sp1234 除了这样做,还有没有其他更高明的设计手段! Class A 我实际应用中,其实只要这一个类在“程序上”就可以了。 不过,它下面有几百个方法,这样一来,很明显在实际应用中“人”的操作上难免混乱。 所以,我的想法是,把 Class A 通过属性拆分为 Class A1 A2 A3... ... 这样分成若干个组,每个组中再分别实现部分方法。这样虽然在结构设计上麻烦了,但是实际应用中却会清晰得多。 但是这样的设计有个问题是 Class A 中有很多子类的共用方法和属性我没想到怎样能够直接调用。 这是一个完整的需求,不知道 sp1234 除了这样做,还有没有其他更高明的设计手段! 谢谢!!!
xloveme 2013-09-03
  • 打赏
  • 举报
回复
哦,太感谢了 stonespace, devmiao 了,原来我的思路是正确的啊,只是逻辑上错误 private B _b = new B(this); //问题出在了 this 这里。 这一段改为在A的构造中初始化就行了吗? 我测试成功了,谢谢!
stonespace 2013-09-03
  • 打赏
  • 举报
回复
这不是结构设计的问题,给A写个构造函数就可以, private B _b =null public A(){ _b=new B(this); }
devmiao 2013-09-02
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    public class A
    {
        private B _b;
        public A()
        { _b = new B(this); }
        public B B
        {
            get
            {
                return _b;
            }
        }
    }
    public class B
    {
        private A _a;
        public B(A a)
        {
            _a = a;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            A a = new A();
            Console.WriteLine(a.B);
        }
    }
}
  • 打赏
  • 举报
回复
由于你只给出了“最为空洞”的需求描述,这里只能就技术而写代码。 但是过度纠结于技术往往是有害的。在设计中,设计师会千方百计推迟这类“刚开头尚且没有什么业务内涵式,就空想两个东西纠结在一起”的设计方式。 有经验的设计师知道解耦的重要性,他会仔细分析“领域模型”,比如说是抽象继承的那么就抽象继承,是业务上独立的那么就根据业务先后次序而引入必要的“依赖倒置”设计,但是都是先独立实现了很多业务内容,充分考虑千变万化的操作行为,最后才联系在一起。尽量避免过度技术化。
  • 打赏
  • 举报
回复
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
public class A
    {
        private B _b;
        public B B
        {
            get
            {
                return _b;
            }
            internal set
            {
                _b = value;
            }
        }
    }
    public class B
    {
        private A _a;
        public B(A a)
        {
            _a = a;
            _a.B = this;
        }
    }
 

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧