2013-06-13 64 views
1

我做了一個InputBox類,它返回一個字符串,但我希望該類在退出時返回一個字符串。製作一個類似於Visual Basic輸入框的輸入框

我希望它的行爲與Visual Basic輸入框完全相同。

現在我已經傳遞了一個可變字符串值到構造函數中,並以此方式進行更改。但後來我意識到Visual Basic輸入框會更好。

myValue = InputBox(message, title, defaultValue) 

如何創建我自己的InputBox類?我意識到我可以將VB輸入框導入到c#中,但我想製作自己的自定義InputBox。

編輯:我想我對此如此着迷的原因是因爲Visual Basic可以讓你調用一個函數而不用放上類的名字。我希望有一種方法可以在不使用委託的情況下在C#中執行此操作。我認爲我的解決方案可能是創建一個封裝我的表單的函數。因此,也許我會重申一下我的問題,是否有一種方式可以通過某種類似於課堂的視覺行爲來返回值?

+0

我認爲你唯一可以在C#中調用一個靜態函數而不指定它來自哪個類的是該函數是在你正在編寫代碼的類中聲明的。如果它是一個構造函數,則需要'new'。所以我不認爲你可以使用與VB相同的語法,但這應該不重要--C#不是VB,它不需要具有相同的語法。 – Patashu

+0

WPF或winforms? –

+0

Winforms,但西蒙給了我聖盃,讓我所有的課程看起來像功能的終極工具!我只是使用'隱式運算符'來使類看起來像函數,但它們將是非常模塊化的函數。 – CodeCamper

回答

1

你假定Visual Basic InputBox是一個類是錯誤的。它實際上是一個功能。下面是該方法的定義:

Public Function InputBox(_ 
    ByVal Prompt As String, _ 
    Optional ByVal Title As String = "", _ 
    Optional ByVal DefaultResponse As String = "", _ 
    Optional ByVal Xpos As Integer = -1, _ 
    Optional ByVal YPos As Integer = -1 _ 
) As String 

挖得更深一些,它位於Microsoft.VisualBasic.dll中作爲Interaction類的方法。

模擬VB.NET語法糖最接近的方法是將您的自定義InputBox隱式轉換爲string,如:

public class InputBox 
{ 
    private string _title; 

    public InputBox(string title) 
    { 
     _title = title; 
    } 

    public static implicit operator string(InputBox from) 
    { 
     return from._title; 
    } 
} 

// .. elsewhere .. 
string title = new InputBox("Test"); 
Console.WriteLine(title); // prints Test 

..雖然我不知道如果我這樣做個人。

顯然title就是一個例子。你的InputBox類會產生一個Form(或繼承它)並將輸入返回到表單中。

..可能我問你爲什麼要複製這個?

+0

我錯過了能夠在我的所有程序中重用的簡單功能。比如老式的MsgBox和InputBox,在標準化的對話框中詢問用戶輸入的情況非常普遍。使用類名或創建委託似乎很愚蠢,所以我不必輸入它。我正在爲自己製作的遊戲製作自己的對話框。 我對這個'隱式運算符字符串'着迷 - 我從來沒有見過這個,並認爲我一定會使用它!你能更詳細地瞭解這個工作原理嗎?所以我可以爲每種數據類型創建一個隱式運算符? – CodeCamper

+0

我非常感謝你爲我這個從未見過的隱式運算符代碼。現在我有一大堆想法來滿足我基於功能的編程需求!你只是給了我需要的工具,將C#變成一種更加功能化的編程語言,而不是其他人的意志! – CodeCamper

+0

我認爲我的例子和你一樣接近。您正在尋找類似於C++中的'friend'關鍵字的東西,這在C#中並不存在。上面的例子純粹是運算符重載。在這種情況下,它是從'InputBox'到'string'的隱式運算符。運算符重載在C#中並不是非常常見(從我所見過的),但它肯定應該由C#開發人員至少理解**。 –