程序中有幾十個需要全局使用的對象。有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#有其他的辦法實現這個功能。求教,謝謝
單例的方式比較適合你這情況。幾十個對象每個對象都做成單例或者一個單例裡面包含幾十個對象
如
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().方法