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

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

您好,請問如何使用范型類做另一個方法的參數(shù)c#?

您好,請問如何使用范型類做另一個方法的參數(shù)c#?

catspeake 2021-11-18 15:11:22
比如有個范型的類1.public class GenericityUserInfo〈T〉{private string _username;private string _password;/// <summary>/// 用戶名/// </summary>public string UserName{get { return _username; }set { _username= value; }}/// <summary>/// 密碼/// </summary>public string PassWord{get { return _password; }set { _password= value; }}}2.現(xiàn)在我要把這個類作為另一個方法的參數(shù)如何使用private string CreateRegist(GenericityUserInfo <T>)??{傳過來之后,我如何訪問這個范型類的屬性UserName,PassWord其中這個范型類可能是任意的類,不是固定死的也就是這個范型類的名字是變化的,里面的屬性也是變化的}我想實現(xiàn)的功能是,能夠重復(fù)使用這些代碼,實現(xiàn)對這些范型的屬性賦值,或者將這些已經(jīng)被賦值的范型屬性的值寫入到數(shù)據(jù)庫中
查看完整描述

3 回答

?
慕容3067478

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

當(dāng)泛型的參數(shù)類型是動態(tài)的...
Posted on 2007-04-26 17:58 zhuweisky 閱讀(3428) 評論(17) 編輯 收藏 所屬分類: C#專欄
在使用泛型技術(shù)時,我們經(jīng)常使用靜態(tài)泛型參數(shù),即泛型的參數(shù)類型在編譯時就已經(jīng)確定,比如:
IList<int> list = new List<int>(); 集合IList的泛型參數(shù)是int類型,這在編譯期就可以知道,于是,我們可以這樣調(diào)用IList<>的Add方法:
list.Add(6) ;
如果泛型的參數(shù)類型是動態(tài)的了,也就是說,只有當(dāng)程序運行起來后,才知道泛型參數(shù)的具體類型,其可能是int,也可能是string或其它。那該如何?使用反射,大家都知道這個答案,是的,使用反射可以解決問題,但是,反射就會有兩個與身俱來的缺陷:一是喪失了強類型的好處,二是效率不高。

還有一種更優(yōu)雅的解決方案,那就是使用動態(tài)代理。針對上述的例子,我們首先定義一個非泛型的接口:
/// <summary>
/// ISimpleList 用于創(chuàng)建動態(tài)代理,將運行時的IList<>接口轉(zhuǎn)換為靜態(tài)的ISimpleList接口
/// </summary>
public interface ISimpleList
{
void Add(object element);
} 然后,調(diào)用ESBasic.Emit.DynamicTypeEmitter類的static CreateDynamicProxy方法,創(chuàng)建動態(tài)代理實例,該動態(tài)代理實現(xiàn)了ISimpleList接口,接著便可以調(diào)用ISimpleList的Add方法來添加元素到集合中。 public static void CallAddDemo(Type listElementType ,object addedElement)
{
Type closedGenericListType = typeof(List<>).MakeGenericType(listElementType);
object list = Activator.CreateInstance(closedGenericListType);
ISimpleList simpleList = (ISimpleList)DynamicTypeEmitter.CreateDynamicProxy<ISimpleList>(list);

simpleList.Add(addedElement);
} 動態(tài)代理解決方案的效率因素:
(1)同一個動態(tài)代理類型只會生成一次,ESBasic會緩存生成的代理類型,以后便不會重復(fù)生成。
(2)動態(tài)代理的方法的調(diào)用將直接轉(zhuǎn)發(fā)(如 前面的ISimpleList.Add方法會直接轉(zhuǎn)發(fā)給IList<>.Add),不會有反射的效率損失。
(3)如果是值類型元素,那么可能會有box和unbox的性能損失;對于引用類型,則不存在



查看完整回答
反對 回復(fù) 2021-11-24
?
搖曳的薔薇

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

這個也算泛型?
至少也該這樣吧
public class GenericityUserInfo〈T〉
{
public T TP
{
get; set;
}
}



查看完整回答
反對 回復(fù) 2021-11-24
?
慕村9548890

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

你的需求其實是泛型約束。
我給出的方案如下:
(1)首先定義一個基類GenericityUserInfo,也可以是接口,抽象類也可以,只要有兩個 虛屬性 PassWord和UserName
(2)然后你的方法這樣定義:
private string CreateRegist<T>(T t)where T:GenericityUserInfo
{
//在這里,可以保證t有屬性 PassWord和UserName
}

 

查看完整回答
反對 回復(fù) 2021-11-24
  • 3 回答
  • 0 關(guān)注
  • 286 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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