當我們在visual studio新增乙個自定義控制項時,它都會給我們以下預設的**。
[defaultproperty("text")]在這個控制項中有個預設的屬性"text",在這個屬性有[defaultvalue("")]相應的特性,來給該屬性設定預設值。以前一直[toolboxdata("<:webcustomcontrol1 runat=server>")]
public class webcustomcontrol1 : webcontrol
set
}
protected override void rendercontents(htmltextwriter output)
} [defaultproperty("text")]
[toolboxdata("<:webcustomcontrol1 runat=server>")]
public class webcustomcontrol1 : webcontrol
set}
protected override void rendercontents(htmltextwriter output)
}
想不明白微軟是怎麼實現的,直到昨天看了《你必須知道的.net》中講「特性」這一章受到了啟發。於是我馬上去試試,
還真的可以。廢話少說,來看看我的實現方法。
首先我們先建立乙個自己預設值特性selfdefaultvalueattribute:
[attributeusageattribute(attributetargets.all, // 可以對任何應用程式元素應用屬性接著我們建立乙個自己的控制項父類selfcontrolallowmultiple = true, // 允許指定多個例項
inherited = false)] // 不繼承到派生類
public class selfdefaultvalueattribute : system.attribute
public object attrvalue
} [attributeusageattribute(attributetargets.all, // 可以對任何應用程式元素應用屬性
allowmultiple = true, // 允許指定多個例項
inherited = false)] // 不繼承到派生類
public class selfdefaultvalueattribute : system.attribute
public object attrvalue
}
public class selfcontrol這個控制項只有乙個屬性"name"預設值為空。說明一下的是,在這裡我們用到了反射的機制,所以我們要引入空間:else
} }
[selfdefaultvalue("")]
public virtual string name
}
public class selfcontrol
else}}
[selfdefaultvalue("")]
public virtual string name
}
system.reflection。
現在,我們就可以建立屬於自己定義的控制項了。好了,終於完成了。那我們現在來測試一下。
public class myrun由於我們沒給控制項的高度設定預設值、高度型別int,所以高度預設為0;而名字和標籤型別為string,所以為空。",selfcon.width);
console.writeline("控制項高度:", selfcon.height);
console.writeline("控制項名字:", selfcon.name);
console.writeline("控制項標籤:", selfcon.htmltag);
console.writeline("控制項文字:", selfcon.text);
console.readline();
}
} public class myrun
",selfcon.width);
console.writeline("控制項高度:", selfcon.height);
console.writeline("控制項名字:", selfcon.name);
console.writeline("控制項標籤:", selfcon.htmltag);
console.writeline("控制項文字:", selfcon.text);
console.readline();}}
最後的結果就是:
view plaincopy to clipboardprint?
控制項寬度:100
控制項高度:0
控制項名字:
控制項標籤:
控制項文字:testcontrol
控制項寬度:100
控制項高度:0
控制項名字:
控制項標籤:
控制項文字:testcontrol
C 高階之特性(Attribute)
相信只要是用過.net mvc的開發都用過特性,例如最基礎的httpmethodattribute特性,用來給介面進行請求方式限定的,等等諸如此類的特性,數不勝數。那麼什麼是特性?特性就是乙個類,直接或者間接繼承自attribute,特性本身沒有任何作用。特性的使用方法有兩種 range 0,10 ...
C 特性Attribute學習
起初一直糾結於如何呼叫特性附著在下面那個成員的值,後來發現不需要呼叫,通過反射載入的時候是自動繫結上去的,即 獲得成員物件之後,有乙個方法可以獲得特性標籤。其實從類庫提供者,和類庫使用者的角度,分開來看就很容易理解了。類庫提供者 myclasslib類 myclasslib類有乙個showstrin...
C 特性Attribute學習
起初一直糾結於如何呼叫特性附著在下面那個成員的值,後來發現不需要呼叫,通過反射載入的時候是自動繫結上去的,即 獲得成員物件之後,有乙個方法可以獲得特性標籤。其實從類庫提供者,和類庫使用者的角度,分開來看就很容易理解了。類庫提供者 myclasslib類 myclasslib類有乙個showstrin...