有時我們需要判斷某個類是否實現了某個介面(inte***ce),比如在使用反射機制(reflection)來查詢特定型別的時候。
簡單來說,可以使用type.isassignablefrom方法:
1
2
typeof(ifoo).isassignablefrom(bar.gettype());
typeof(ifoo).isassignablefrom(typeof(barclass));
從字面意思可以看出,isassignablefrom表示barclass型別能否賦值給ifoo介面,所以它返回true的條件就是barclass直接或間接實現了ifoo介面。type型別中還有乙個方法是issubclassof,它只能用於判斷類的繼承關係,比如
1
typeof(fooclass).issubclassof(typeof(barclass)) == true
表示fooclass是繼承自barclass。
當然isassignablefrom也可以用來判斷繼承關係。
於是,對於以下的**:
1
2
3
inte***ce i
class a : i
class b : a
issubclassof和isassignablefrom的返回值為:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
typeof(a).isassignablefrom(typeof(i)); // false
typeof(a).issubclassof(typeof(i)); // false
typeof(i).isassignablefrom(typeof(a)); // true
typeof(i).isassignablefrom(typeof(b)); // true
typeof(b).issubclassof(typeof(i)); // false
typeof(a).isassignablefrom(typeof(a)); // true
typeof(a).issubclassof(typeof(a)); // false
typeof(a).isassignablefrom(typeof(b)); // true
typeof(a).issubclassof(typeof(b)); // false
typeof(b).isassignablefrom(typeof(a)); // false
typeof(b).issubclassof(typeof(a)); // true
c 11判斷某個類是否具有某個函式成員
by 鳥哥 c 11判斷某個類是否含有某個成員函式和變數 include include include template typename t struct has member f1 template typename t struct has member aa struct class1 v...
時間範圍比較,判斷某個時間是否在某個時間段內工具類
時間格式化 判斷某個時間是否在某個時間段內 param date 待比較的時間 param format 時間格式,eg hh mm param starttimestr 時間範圍的開始時間,eg 06 00 param endtimestr 時間範圍的結束時間,eg 22 00 public st...
C 判斷某個類是否有某個成員函式,如果有則呼叫
有兩個sdk版本,a版本類base有setscalingmode函式,b版本類base無setscalingmode函式,為了同時相容兩個sdk版本,共用一套 常見的是通過巨集隔離,但版本眾多時管理起來會很麻煩,若可先判斷是否含有該函式,若有則呼叫,c 11新增特性解決了這一問題 偽 如果支援set...