簡體   English   中英

C#.NET動態自定義控件,動態返回類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM