1.
有两个类:MainWindows(主要工作类,负责界面,更新状态及显示数据),Controller(控制类,实现具体的操作)在 MainWindows 里建立了一个 public 的名为 proc 的 Process 对象,用于后台调用控制台发送命令实现具体操作,但是模块化的具体实现方法写在 Controller 里。但发现在 Controller 类的方法里无法访问到这个在 MainWindows 建立的 proc 对象,无论 proc 是不是public (输入proc没有出现智能提示)。
基础不牢吃亏了,苦思冥想,于是只能让 Controller 继承了 MainWindows 类,这时候可以访问到 proc 对象了,出现智能提示了。不过这应该不是建议的解决方法吧?2.
同样的,在 Controller 里干完活,要去更新 MainWindows 里的界面上的显示值,也是访问不到。哪怕我把 textbox1 的 modifiers 修改为 public,也还是无法在 Controller 类里进行访问并修改这些类都是动态类,需要生成实例的,难道我要都改成静态类供全局访问?应该有更推荐的解决方案吧?3.
另外,public和protected的区别我糊涂了。不是说public的在任何地方都能访问到么?那么为什么上述情况无法访问?4.
MainWindows 类是窗体类,Controller 继承后 protected 可以访问到 MainWindows 里的成员。但是生成 Controller 实例的同时,会调用 MainWindows 的默认构造函数(Controller 没有自定义构造函数),也就是生成窗体的代码 InitializeComponent(),那么为什么不会因此而出现两个窗体呢?

解决方案 »

  1.   

    一坨狗屎,毫无逻辑。就解决你最后一个疑问吧,你不Show()他怎么可能出现两个窗体。
      

  2.   

    Controller 类是控制类就不应该去调用MainWindows中的任何元素了。由MainWindows来给Controller类中的方法传递参数让改方法返回你想要的结果就行了!
      

  3.   

    你访问不到,那是你写的有问题,至少你要有mainform的实例,通过实例去访问属性,除非你是static属性,直接通过类名访问
      

  4.   

    按照你说的,我在B类里生成Main的实例,去修改该Main中public的label,结果label的值在按下按钮之后不变啊?    public partial class Form1 : Form
        {        public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                Class1 cls = new Class1();
            }
        }    class Class1
        {
            Form1 frm = new Form1();        public void ChangeLabel()
            {
                frm.label1.Text = "Changed";
            }
        }
      

  5.   


    漏了一行,应该是  public partial class Form1 : Form
        {        public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                Class1 cls = new Class1();
                cls.ChangeLabel();
            }
        }    class Class1
        {
            Form1 frm = new Form1();        public void ChangeLabel()
            {
                frm.label1.Text = "Changed";
            }
        }