第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

該如何使用C#中對不同類的實例對象進行批量操作?

該如何使用C#中對不同類的實例對象進行批量操作?

C# C
PIPIONE 2021-11-19 11:11:02
已知:public Hashtable ht=new Hashtable();public class class1{public string name="c1";}public class class2{public string name="c2";}public class class3{public string name="c3";}// .// .// .//class1,class2,class3……classN 這些類可以看成是一些寫好forms窗體類public class classN{public string name="cN";}public class change{public change(){}public void rename(類型? ci,string stri) //???這個地方怎么定義參數(shù)ci???{ci.name=stri;}}想要的操作://對N個類進行判斷操作。如果類被實例化一次,直接修改name;如果沒有,則實例化,然后修改nameif (ht中是否記錄了對象c1的ID) { c1.name="c11";}else { c1=new class1(); c1.name="c11";添加c1的ID到ht中 }if (ht中是否記錄了對象c2的ID) { c2.name="c22";}else { c2=new class2(); c1.name="c22"; 添加c2的ID到ht中 }if (ht中是否記錄了對象c3的ID) { c3.name="c33";}else { c3=new class3(); c1.name="c33"; 添加c3的ID到ht中 }// .// .// .if (ht中是否記錄了對象cN的ID) { cN.name="cNN";}else { cN=new classN(); c1.name="cNN"; 添加cN的ID到ht中 }最終需要的類:(轉(zhuǎn)化為批量操作:)public void main(){change change1=new change();change1.rename(c2,c2.name+"2")change1.rename(c5,c5.name+"5")change1.rename(c99,c99.name+"99")}說明上面那些代碼可能語法不對,請高手自己改成C#下的。只希望能看懂我的問題所在。假設(shè)有100個窗體類class1,class2,class3 ... class100,不需要實例化所有的窗體,而是需要對某個窗體操作時,再判斷窗體是否被實例化啟動了,然后再修改 所實例化的窗體的內(nèi)容。而且修改時,必須把窗體類當(dāng)作一個變量方便批量操作。因此1 需要定義一個 change類,控制所有的窗體情況。怎么寫好這個change類???2 或者怎么可以把窗體類class1,class2,class....N這些當(dāng)作一個變量?直接拿原例來說吧:frm1 f1= new frm1();f1.Load += new EventHandler(form_Load);f1.Closed += new EventHandler(form_Closed);f1.Show();frm2 f2= new frm2();f2.Load += new EventHandler(form_Load);f2.Closed += new EventHandler(form_Closed);f2.Show();frmN fN= new frmN();fN.Load += new EventHandler(form_Load);fN.Closed += new EventHandler(form_Closed);fN.Show();能不能編寫個函數(shù)供調(diào)用:如下public void bindForm(System.Windows.Forms fi){frmi fi= new frmi();fi.Load += new EventHandler(form_Load);fi.Closed += new EventHandler(form_Closed);fi.Show();}反正就是不知道如何寫參數(shù)fi的類型,因為frm1,frm2,frm3等等這些類同屬于一個命名空間,但父類forms也不對!怎么可以把frmi這個類,轉(zhuǎn)化為一個可調(diào)用的參數(shù)剛查了下,貌似用反射機制來實現(xiàn)。但還是不太會:public void bindForm(string formclassName){創(chuàng)建formclassName對應(yīng)的窗體類實例,調(diào)用里面的方法設(shè)置某些成員的屬性。}
查看完整描述

2 回答

?
互換的青春

TA貢獻1797條經(jīng)驗 獲得超6個贊

用反射:

主調(diào)類:
private void button3_Click(object sender, EventArgs e)
{
bindForm("WindowsApplication1.UserControl1");
}

private void bindForm(string f)
{
System.Type t = System.Type.GetType(f);
object ff = Activator.CreateInstance(t,null);
System.Reflection.MethodInfo method = t.GetMethod("setText");
System.Reflection. BindingFlags flag = System.Reflection. BindingFlags.Public |System.Reflection. BindingFlags.Instance;
object returnValue = method.Invoke(ff, null);
}
各窗體:
public partial class UserControl1 : Form
{
public UserControl1()
{
InitializeComponent();
}
public void setText()
{
Text = "kkk";
Show();
}
}



查看完整回答
反對 回復(fù) 2021-11-23
?
智慧大石

TA貢獻1946條經(jīng)驗 獲得超3個贊

public void rename(類型? ci,string stri) //???這個地方怎么定義參數(shù)ci???

用object ci
對象.萬類之根~~
剩下的不說啦哈哈~

最好你用
public void rename(ref string name,string stri)用引用參數(shù)
{
name = stri;
}

rename(class1.name,"123");
//然后這里class1.name 就被設(shè)成"123"了

反射機制-----本人以前也只稍微研究過一會,也不太熟悉,以下提供為參考

System.Reflection.Assembly

Assembly assembly = Assembly.LoadFile("dll絕對路徑");
Module[] modules = assembly.GetModules();
//得到方法
---------------------------------------------

//獲取類型信息
Type t = Type.GetType("TestSpace.TestClass");
//構(gòu)造器的參數(shù)
object[] constuctParms = new object[]{"timmy"};
//根據(jù)類型創(chuàng)建對象
object dObj = Activator.CreateInstance(t,constuctParms);
//獲取方法的信息
MethodInfo method = t.GetMethod("GetValue");
//調(diào)用方法的一些標(biāo)志位,這里的含義是Public并且是實例方法,這也是默認(rèn)的值
BindingFlags flag = BindingFlags.Public | BindingFlags.Instance;
//GetValue方法的參數(shù)
object[] parameters = new object[]{"Hello"};
//調(diào)用方法,用一個object接收返回值
object returnValue = method.Invoke(dObj,flag,Type.DefaultBinder,parameters,null);

個人見解,反射用起來巨耗性能,可以稱為是華麗的招數(shù)



查看完整回答
反對 回復(fù) 2021-11-23
  • 2 回答
  • 0 關(guān)注
  • 580 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號