blreflection 是我自己寫的乙個關於反射操作的類,在我之前關於linq的文章有用到, 希望有需要的朋友可以看看。
using
system;
using
system.collections.generic;
using
system.linq;
using
system.text;
using
system.reflection;
namespace
common
public
static
list
getproperties(type
t)public
static
ienumerable
getpropvalues(object
obj)
//add in feb 07, 2009
public
static
object
getpropvalue(object
obj, string
propname)
public
static
object getpropattributes(object
obj, string
propname)
public
static
t getpropattribute
(object
obj, string
propname)
public
static
string getpropfrom
(object
obj, func
filter) where
t : attribute
}return
result .toarray();
}public
static
idictionary
todictionary
(tt) //where t : class
public
static
string
getclassname
() where
t : class
public
static
tparse
(string
str) where
t : struct
public
static
object
parse(type
type, string
str)
);
varm = mfactory.getparsemethod(type);
if (m == null) return
str;
object
result = m.invoke(null, new
object );
return
result;}}
public
static
class
mfactory
}public
static
methodinfo
getparsemethod(type
type)
);methods.add(type, m);
}return
methods[type];}}
}這裡主要說說parse的用法, 因為其他方法對於會reflection的人來說已經是很簡單的事情了。 blrelection.parse 是動態呼叫基本資料型別的parse方法(當然其他有parse公共方法的類也可以)。而
mfactory類是對這些parse方法做乙個快取,以後呼叫同一型別的parse方法就會快多了(畢竟反射是比較慢的,相信用過的人都知道)。
乙個小例子: int data = blreflection.parse(typeof(int), "121212"); //結果是data=
121212
這個例子不足於說明這個方法的通用性。但是我沒有時間寫乙個更好的例子來說明,在這裡就簡單說說關於資料轉換的乙個例項吧—— 譬如有乙個form, 裡面有一些基本的錄入(例如說錄入user, user 類是這個樣子, 那麼這個form就有3個textbox, 分別是txtname,txtage, txtheight),通常我們的做法是:
user user= new user();
user.name= txtname.text ;
user.age = int.parse(txtage.text);
user.height = double.parse(txtheight.text); //假如height是175.5 這樣型別資料的話
我們也可以借用反射來寫個公共的方法處理:
public void updatemodel(t t, control controls)
有點ioc的味道, 呵呵(暗喜。。。)。
但在實際應用中不會用到(原因:1.效率, 2.資料型別一般不會這麼簡單)(回到現實 - . -!)
常成員,常函式,常物件
知識點1.常物件中的任何型別的資料成員 無論私有還是公有 的值都不能被改變。知識點2.常物件能呼叫的 1.公有的常成員函式 2.建構函式 3.公有的靜態函式 知識點3.常物件與常成員函式只有同時存在才都有意義 知識點4.普通物件既可以呼叫常成員函式,也可以呼叫非常成員函式 知識點5.常成員函式不能更...
常物件,常成員函式,常引用
宣告顯示 const 型別說明符 物件名 常物件的資料成員值在物件的整個生存期間不能被改變,即就是,常物件必須進行初始化,而且不能被更新。宣告形式 型別說明符 函式名 參數列 const 注意 1.在函式定義部分也需要帶const關鍵字。2.乙個常物件只能呼叫它的常成員函式,是常物件唯一的對外介面方...
this指標 常函式 常物件
this指標引入 類中物件的成員變數和成員函式是分開儲存的,sizeof 空class 1,另外示例中涉及到位元組對齊的問題,double本身的位元組為8,int為4,由於位元組對齊,int也為8,所以最終位元組數為16 1 class person 89 void test01 非靜態成員變數才屬...