vencon_s
2015-05-21 17:17
采纳率: 75%
浏览 2.7k

C# 类似于全局使用的对象,但是有几十个,有近似的基本属性。能否简单实现而不用建几十个静态类。

程序中有几十个需要全局使用的对象。有3个相同的属性,2个相同的方法。但是每个对象也有一些独有的属性和方法。
这些全局对象的属性根据需要会在程序中修改。
最初想法建一个基础类,基础类包含共同属性和方法。其余的对象在基础类中派生。然后把这几十个对象加入一个对象数组,启动程序的时候使用foreach使用共同的方法根据每个对象的属性值对每个对象赋值初始化。
但是这种方法的缺陷是每个对象都必须实例化。如果是在窗口1中实例化,窗口2要就调用不了,要调用也必须把他作为参数传递到窗口2。但这个存在的麻烦就是在窗口2中我需要比较很多个对象的属性,把他们全部作为参数传递也不太现实。
希望的实现:能否存在一种方法,能够派生,在程序初始化时实例化对象,并能像静态类一样的能在全局引用这几十个对象。

class bass
{

string xname;
public string Xname{get xname;set xname=value;};
public void dosome(string Xname)
{
dosomething.......
}
........
}
class myctr1:bass
{

}
class myctr2:bass
{}
.........
List myctr= new List();
myctr1 m1=new myctr1();
m1.Xname="name1";
myctr.Add(m1);
myctr2 m2=new myctr2();
m2.Xname="name2";
myctr.Add(m2);
..........
foreach (bass myc in myctr)
{
myc.dosome(Xname);

}


在窗口2中我想直接使用对象名调用。

m1.方法;

或者说C#有其他的办法实现这个功能。求教,谢谢

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

10条回答 默认 最新

  • danielinbiti 2015-05-21 17:31
    已采纳

    单例的方式比较适合你这情况。几十个对象每个对象都做成单例或者一个单例里面包含几十个对象

     class CtrMgr
        {
            private static CtrMgr _ctrMgr = null;
            private myctr1 m1 = null;
            private myctr2 m2 = null;
            private CtrMgr()
            {
                List myctr = new List();
                m1 = new myctr1();
                m1.Xname = "name1";
                myctr.Add(m1);
                m2 = new myctr2();
                m2.Xname = "name2";
                myctr.Add(m2);
            }
            public void dosome(string str)
            {
    
            }
            public myctr1 getmyctr1()
            {
                return m1;
            }
            public myctr2 getmyctr2()
            {
                return m2;
            }
            public static CtrMgr getInstence()
            {
                if (_ctrMgr == null)
                {
                    _ctrMgr = new CtrMgr();
                }
                return _ctrMgr;
            }
        }
    
            使用的时候就
            CtrMgr.getInstence().getmyctr1().方法
            CtrMgr.getInstence().getmyctr2().方法
    
    打赏 评论
  • 知常曰明 2015-05-21 21:59
    • 为你的数组做一个单例的类,这样既可以使用到你自己想到的那些好处,又可以不用为传递而烦恼。
    打赏 评论
  • 微wx笑 2015-05-22 00:08

    全局对象没必要使用静态类吧。

    有3个相同的属性,2个相同的方法,这个可以考虑使用接口、抽象类,这样虽然维护多个类,但只是维护不同的部分;

    如果是在窗口1中实例化,窗口2要就调用不了?
    你声明变量的位置放到 Program.cs文件中

    打赏 评论
  • 长空X 2015-05-22 00:13

    建议你做一个伺服类,来管理这些对象。。还有就是不要有重叠,要弄成责任单一制,不然耦合有点高

    打赏 评论
  • WorldMobile 2015-05-22 00:45

    C# 类似于全局使用的对象,但是有几十个,有近似的基本属性。能否简单实现而不用建几十个静态类。

    看看能不能想办法统一,直接用一个静态类来实现,应该比较方便了

    打赏 评论
  • 存钱买冰棍 2015-05-22 00:51

    对于你说的第一个问题;
    没法那么理想化的,需要实例化几十种不同的实例就需要写好不同的几十种类去实例化他们
    但的确可以不写成几十种类,可以在一个基类中添加一个
    class bass
    {
    ////这边写共有属性和共有方法///
    ///
    ///
    ///
    ////这边写共有属性和共有方法///

    List attributeList //特有属性列表
    struct attribute
    {
    string attributeName; //属性名
    dynamic attributeVaule; //属性值
    }
    public dynamic this[int a]
    {
    get{return this.attribute[a];}
    set{attribute.add(value);}
    }//设置一个索引读写特有属性

    }
    属性的问题解决了,现在解决特有方法的问题
    在类中写你所需要的方法的委托
    然后在实例过程中用相应的委托根据相应的方法实例化相应的方法委托
    然后用这个方法委托就可以调用所需的方法了

    打赏 评论
  • 不得闲 2015-05-22 02:08

    建立一个全局公用的对象都包含这几个,然后所有位置共享不行嘛!

    打赏 评论
  • 茶木牟夕由 2015-05-22 02:18

    全局对象没必要使用静态类吧。

    有3个相同的属性,2个相同的方法,这个可以考虑使用接口、抽象类,这样虽然维护多个类,但只是维护不同的部分;

    如果是在窗口1中实例化,窗口2要就调用不了?
    你声明变量的位置放到 Program.cs文件中

    打赏 评论
  • threenewbee 2015-05-22 02:21

    哪有你这么写程序的,这样的程序当你试图添加或者删除一个窗口,或者你打算将某个窗口的代码拿到另一个程序中使用,你就杯具了。

    打赏 评论
  • futinghao1997 2015-05-22 02:23

    建立一个全局公用的对象都包含这几个,然后所有位置共享不行嘛!

    打赏 评论

相关推荐 更多相似问题