我可以在.NET中使用类作为变量

VRM*_*VRM 2 .net c# vb.net variables class

Public Class Temperature
        Private dDegrees As Double
        Private dFahrenheit As Double

        Public Enum InputType
            Degrees
            Fahrenheit
        End Enum

        Sub New(ByVal dTemp As Double, eInputType As InputType)
            Select Case eInputType
                Case InputType.Degrees
                    dDegrees = dTemp
                    dFahrenheit = (1.8 * dTemp) + 32
                Case InputType.Fahrenheit
                    dFahrenheit = dTemp
                    dDegrees = (5 / 9) * (dTemp - 32)
            End Select
        End Sub

    ' Properties and methods here

    End Class
Run Code Online (Sandbox Code Playgroud)

让我们说这是班级.

在主要代码中我想做这样的事情.

Dim citytemp As New Temperature(35, Temperature.InputType.Degrees)
Dim value as double
'some code
value = citytemp - 18
Run Code Online (Sandbox Code Playgroud)

我不想使用像citytemp.value或citytemp.degrees这样的东西.我只想包含citytemp,并且应该用其替换以度为单位的默认值.

一个类可以像这样构建吗?

我对VC#或VB都很满意

Lea*_*dro 6

在C#中,您可以使用隐式和显式转换运算符.在这里查找:http://msdn.microsoft.com/en-us/library/85w54y0a.aspx

我不知道它是如何使用VB(或者是否可能),也不知道语法.

但是,在你的这种特殊场景中,我不会为Temperature类实现这个功能:它只会给设计带来混乱,使代码难以维护.我认为使用如下语法会更清楚:

value = citytemp.ToCelsius() - 18;
Run Code Online (Sandbox Code Playgroud)


Mat*_*int 5

您可以在VB.NetC#中使用运算符重载

Public Shared Operator -(t as Temperature, d as double) As Temperature
    Return New Temperature(t.dDegrees - d)
End Operator
Run Code Online (Sandbox Code Playgroud)
public static Temperature operator-(Temperature t, double d)
{
    return new Temperature(t.dDegrees - d);
}
Run Code Online (Sandbox Code Playgroud)

其他几点说明:

  • 您可能也想要实现加法运算符.
  • 您可能希望实现其他接口,例如IComparableIEquatable
  • 这可以更好地实现为Structure(vb)或struct(c#)
  • 应该只有一个字段.选择该字段代表的单位,然后只存储一个.另一个字段应该是只有a的属性get,它应用计算.
  • 请注意,这些运算符的数学运算始终采用特定单位(在本例中为摄氏度).
  • 这种类型的对象通常称为值对象.

另请注意,在您的问题中,您已将结果分配给a double,但我举了一个将其作为a返回的示例Temperature,我认为这更有意义.如果你也希望它可以分配给a double,你可以添加隐式转换操作,正如Leandro在他的回答中所建议的那样.