设计自定义属性的过程十分简单,在设计属性前只需要考虑以下几个方面:
- 使用属性的目的是什么?
属性可以以很多方式使用。你需要定义属性到底要完成什么功能并确保这些特定功能没有内建在.NET框架集中。使用.NET修改器要比使用属性好,因为这将简化同其它装配件的集成过程。
- 属性必须储存什么信息?
属性是打算用来指示某个功能的简单标志吗?或者属性是否要储存信息?一个属性可以拥有设计时赋予的一组信息,并在运行时查看这些信息。例如,看一下示例应用中的别名属性。
- 属性应该驻留在哪个装配件中?
大多数情况下,可以将属性包含在使用该属性的装配件中。不过也有这样的例子,将属性驻留在公共的、轻量级的、共享装配件中会更好些。这种类型的配置允许客户使用属性时不必引用不需要的装配件。
- 哪些装配件将会识别属性?
如果没有模块读取属性,那么它将一文不值。你很可能将读取属性的类放在属性驻留的同一个装配件中。然而,正像前面提到的,也有这样的例子,你想将读取属性的方法与属性自身分别放在不同的装配件中。
/// <summary>
/// 自定議一下FileType屬性
/// </summary>
string sFileType = "*";
//Browsable:取得值,表示物件是否為可瀏覽。
[Browsable(true)]
//DefaultValue:取得物件,其中包含與組態屬性有關的預設值。
[DefaultValue("*")]
//Category:取得屬性 (Property) 分類的名稱或與這個屬性 (Attribute) 所套用的事件。
[Category("Basic_Property"), Description("當是輸入路徑的時候加上文件的文件類型")]
public string FileType
{
//取值方法
get
{
return sFileType;
}
//赋值方法
set
{
sFileType = value;
//當屬性被使用時,為了便於查看結果,將txtbox控件賦上值
if (sFileType == "C#")
{
this.Text = "C#";
}
else
{
this.Text = "???";
}
}
}
/// 自定議一下FileType屬性
/// </summary>
string sFileType = "*";
//Browsable:取得值,表示物件是否為可瀏覽。
[Browsable(true)]
//DefaultValue:取得物件,其中包含與組態屬性有關的預設值。
[DefaultValue("*")]
//Category:取得屬性 (Property) 分類的名稱或與這個屬性 (Attribute) 所套用的事件。
[Category("Basic_Property"), Description("當是輸入路徑的時候加上文件的文件類型")]
public string FileType
{
//取值方法
get
{
return sFileType;
}
//赋值方法
set
{
sFileType = value;
//當屬性被使用時,為了便於查看結果,將txtbox控件賦上值
if (sFileType == "C#")
{
this.Text = "C#";
}
else
{
this.Text = "???";
}
}
}
注:
如果只設置get{ ... },表示是只讀屬性。
如果只設置set{ ... },表示是只寫屬性。只寫屬性適用於對密碼這樣的數據進行保護。理想情況下,需要確保安全性的應用程序允許設置密碼,但不允許你把它讀出來。一個登錄方法只應將用戶提供的密碼與存儲的密碼比較,並返回兩者是否匹配的消息。
參考:http://www.pcdog.com/edu/csharp/2007/04/j184921.html