如何有条件地定义变量?

时间:2016-01-06 15:16:08

标签: vb.net class variables

我有一个类设置,如下面的示例我想基于在实例化时传递给类的一些信息来定义变量(var1)。我该怎么做?

config(function($stateProvider) {
$stateProvider.state('search', {
url: '/search?page&loc&seaters&owner&min_price&max_price',

4 个答案:

答案 0 :(得分:1)

你没有......在VB中,变量必须具有特定的数据类型。 Data Types in Visual Basic说:

  

编程元素的数据类型是指它可以容纳哪种数据以及如何存储该数据。数据类型适用于可以存储在计算机内存中或参与表达式求值的所有值。

     

每个变量[...]都有一个数据类型。

将不同类的对象放入一个变量中:

  • 他们必须有一个共同的基类或接口,
  • 必须使用该公共类/接口声明变量。

共同基础

  Public Class SomeClass 
      Inherits BaseClassOrInterface
  End Class

  Public Class SomeOtherClass 
      Inherits BaseClassOrInterface
  End Class

所以在你的代码中:

  Private var1 as BaseClassOrInterface

现在var1可以包含任何(SomeClass,SomeOtherClass,BaseClassOrInterface)。

  Public Sub New(which_type as string)

      if which_type = "a" then
          var1 = new SomeClass()
      elseif which_type = "b" then
          var1 = new SomeOtherClass()
      end if

  End Sub

或者你可以将var1声明为System.Object,这是最终的基类(不推荐)。

  Private var1 as Object

答案 1 :(得分:0)

只有具有如下所示的基本类型(C#示例)

时才能执行此操作
public interface Ibase { }

public class someclass : Ibase {}

public class someotherclass : Ibase {}

然后你可以说

  Private var1 as Ibase

  Public Sub New(which_type as string)

 if which_type = "a" then
   ' I need var to be a certain type of class
   var1 = new SomeClass()
 elseif which_type = "b" then
   ' I need var1 to be a different type of class
   var1 = new SomeOtherClass()
 end if

答案 2 :(得分:0)

您可以使用Activator.CreateInstance(Type.GetType("ClassA"))来实例ClassA课程。请参阅this

答案 3 :(得分:0)

您可以在类的声明中指定类型限制。

Public Class oneClass(Of t As New)

    Private var1 As t

    Public Sub New()
        var1 = New t
    End Sub
End Class

Public Class Someclass
    Property Name As String
End Class

然后创建一个实例:

Dim o As New oneClass(Of Someclass)

t As New 限制为具有构造函数的类型,因为在执行 var1 = New t 时需要它。
形成更多控制,您也可以限制为所有类实现的接口。使用 t As {New, IMyInt}

Public Class oneClass(Of t As {New, iMyInt})

    Private var1 As t

    Public Sub New()
        var1 = New t
    End Sub
End Class

Public Class Someclass
    Implements iMyInt
    Property Name As String
End Class

Public Interface iMyInt
End Interface