Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使输入框类似于Visual Basic输入框_C# - Fatal编程技术网

C# 使输入框类似于Visual Basic输入框

C# 使输入框类似于Visual Basic输入框,c#,C#,我创建了一个InputBox类,该类返回一个字符串,但我希望该类在退出时返回一个字符串 我希望它的行为与VisualBasic输入框完全相同 现在,我已经将一个可变字符串值传递到构造函数中,并以这种方式进行更改。但后来我意识到VisualBasic输入框更好 myValue = InputBox(message, title, defaultValue) 我如何像这样创建自己的InputBox类?我意识到我可以将VB输入框导入c#,但我想制作自己的自定义输入框 编辑:我想我之所以如此着迷是因为

我创建了一个InputBox类,该类返回一个字符串,但我希望该类在退出时返回一个字符串

我希望它的行为与VisualBasic输入框完全相同

现在,我已经将一个可变字符串值传递到构造函数中,并以这种方式进行更改。但后来我意识到VisualBasic输入框更好

myValue = InputBox(message, title, defaultValue)
我如何像这样创建自己的InputBox类?我意识到我可以将VB输入框导入c#,但我想制作自己的自定义输入框


编辑:我想我之所以如此着迷是因为VisualBasic允许您调用函数而不必输入类的名称。我希望在C#中有一种不用委托的方式来实现这一点。我认为我的解决方案可能是创建一个封装表单的函数。因此,也许我会将我的问题重新表述为:有没有一种方法可以通过某种在视觉上表现类似于类的东西来返回值?

您认为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中

模拟VB.NET语法糖的最接近的方法是将自定义的
输入框
隐式转换为
字符串
,例如:

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
类将生成一个
表单(或从中继承),并将输入返回到表单中


…我可以问一下,为什么要复制这个吗?

假设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中

模拟VB.NET语法糖的最接近的方法是将自定义的
输入框
隐式转换为
字符串
,例如:

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
类将生成一个
表单(或从中继承),并将输入返回到表单中


…我可以问一下为什么要复制这个吗?

我认为在C#中调用静态函数而不指定它来自哪个类的唯一时间是,如果该函数是在您当前为其编写代码的类中声明的。如果它是一个构造函数,则需要
new
。所以我不认为你可以让它与VB中的语法相同,但这不重要——C#不是VB,它不需要有相同的语法。Winforms但是Simon给了我圣杯,一个让我所有的类看起来像函数的终极工具!我将只使用
隐式运算符
使类看起来像函数,但它们将是非常模块化的函数。我认为在C#中调用静态函数而不指定它来自哪个类的唯一时间是,如果函数是在您当前编写代码的类中声明的。如果它是一个构造函数,则需要
new
。所以我不认为你可以让它与VB中的语法相同,但这不重要——C#不是VB,它不需要有相同的语法。Winforms但是Simon给了我圣杯,一个让我所有的类看起来像函数的终极工具!我将只使用
隐式运算符
使类看起来像函数,但它们将是非常模块化的函数。我失去了在所有程序中重用简单函数的能力。例如旧的MsgBox和InputBox,在标准化的对话框中请求用户输入是很常见的。必须使用类的名称或创建一个委托,这样我就不必键入它,这似乎很愚蠢。我正在为我正在制作的游戏制作自己的对话框。我对这个
隐式运算符字符串非常着迷,我以前从未见过它,我想我一定会使用它!你能更详细地说明这是如何工作的吗?所以我可以为每种数据类型创建一个隐式运算符???哇,我非常感谢您提供了我以前从未见过的
隐式运算符。现在我有一大堆想法来满足我基于函数的编程愿望!你刚刚给了我一个工具,我需要它来把C#变成一种更具功能性的编程语言,而不是其他人的意愿!我想我的例子和你想的一样接近。您正在寻找类似于C++中的代码>朋友< /Cord>关键字的东西。这在C#中是不存在的。上面的示例纯粹是运算符重载。。在这种情况下,它是从
InputBox
string
的隐式运算符。运算符重载在C#中并不常见(据我所见),但至少C#开发人员应该理解它。您的示例非常棒!我肯定会研究更多的朋友关键字和差异<代码>朋友
听起来像我的朋友。现在,我将开始将几乎所有的类转换成想要的函数。我从未想过integer和double是如何进行隐式转换的,这就回答了这个问题。我想这是不常见的,因为它确实可以让你把C语言变成一种功能性更强的语言,而C语言正试图让人们远离它。在VB6中,仅仅能够编写MsgBox,您不会错过吗?我正在制作我自己的MsgBox类,它的行为就像一个具有所有模块化行为的函数。我要警告你运算符重载的危险。。但我认为最好是你自己学习:)很高兴我能帮上忙。我错过了在所有程序中重复使用简单函数的能力。例如旧的MsgBox和InputBox,在标准化的对话框中请求用户输入是很常见的。必须使用类的名称或创建一个委托,这样我就不必键入它,这似乎很愚蠢。