[英]c# .NET dynamic custom control, dynamic return type
這是我想要實現的目標:
我們創建了自己的實體框架,並將實體對象傳遞到自定義控件上。 基於類型(字符串,布爾值,...)和我們希望在頁面上創建的權限有所不同。
例如:
type=string, access=read => display as label
type=string, access=edit => display as textbox
type=boolean, access=read => display as disabled checkbox
type=boolean, access=edit => display as enabled checkbox
我們可能會在以后添加更多內容,但我們將從這些內容開始。
我創建了一個自usercontrol類繼承的自定義控件。 控件完美地呈現在頁面上,這部分我可以管理。
但是問題是從中獲取數據。 控件沒有文本或選中屬性。 因此,我必須創建自己的Value屬性。 我想要此屬性執行的操作是在復選框時返回布爾值,在標簽或文本框時返回文本。 這有可能嗎?如果可以,我該怎么做? (我聽說過一些反射,但是我不確定如何給一個吸氣劑提供多種返回類型的可能性)
由於C#中的所有內容都隱式地繼承自System.Object
(甚至是值類型),因此您可以使其返回並將其強制轉換為所需的類型。 is
運算符可用於檢查類型。
object obj = "foo";
bool isString = obj is string; //true
另外,C#具有一個dynamic
關鍵字,可用於保存任何類型。
class Foo
{
public dynamic Value { get; private set; }
public Foo( string value )
{
this.Value = value;
}
public Foo( bool value )
{
this.Value = value;
}
}
這使您可以使用運算符和調用實例成員,而無需檢查類型和類型轉換,但是請注意,框架在運行時通過反射來解決dynamic
問題,這意味着在編譯時不會捕獲任何錯誤,並且最終會導致異常。 。
下面的編譯很好,但是會在運行時拋出。
Foo BooleanFoo = new Foo( true );
Foo StringFoo = new Foo( "StackOverflow" );
if( BooleanFoo.Value ) //returns true
...
if( StringFoo.Value ) //throws an exception
...
StringFoo.Value.Substring( 0, 5 ); //returns 'Stack'
BooleanFoo.Value.Substring( 0, 5 ); //throws an exception
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.