none
如何把class 作为参数传入? RRS feed

  • 问题

  • 我有3个类 ClassA ClassB ClassC。在过程中要根据不同情况实例化其中一个,我只能写三个过程
    Sub Test A()
     dim a as new classA
    End sub

    Sub Test B()
    dim B as new classB
    end sub

    Sub Test C()
    dim c as new classB
    end sub

    我现在想知道有没有办法可以把Class作为参数传入,使过程成为一个通用过程,比如:

    Sub Test (byref Cl as class)
    dim cl as new Cl
    end sub

    这样就可以把过程作为通用了。请问各位大侠有办法实现类似的方法吗?

    2009年9月22日 10:16

答案

  • 你好!
         方法有很多:
         1,可以把类型名作为参数传递进去,然后使用反射来构建实例
         2,可以直接定义一个泛行类,来实现这样的行为。
        
         由于都是一些基础的知识,所以我没有给出具体的代码,只给出了一些思路,你自己先试着写一下,这些东西还是自己研究比较有趣啊!
    周雪峰
    2009年9月22日 10:58
    版主
  • 反射的方法是通过object o= System.Activator.CreateInstance(type);
    泛型方法
    C#
    public void Test<T>() where T :class
    {}

    Public Sub Test(Of T As Class)()

    End Sub


    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年9月22日 11:35
    版主
  •   Sub Work(ByVal T As System.Type)
            Dim obj = System.Activator.CreateInstance(T)


        End Sub

    也可以  但是这样就要


    class都继承同一接口,传接口的实例
    http://feiyun0112.cnblogs.com/
    比如都继承自  IMyClass


      Sub Work(ByVal T As System.Type)
            Dim obj  as  IMyClass= System.Activator.CreateInstance(T)


        End Sub



    恭喜自己5星用户达成
    2009年9月23日 4:16

全部回复

  • 你好!
         方法有很多:
         1,可以把类型名作为参数传递进去,然后使用反射来构建实例
         2,可以直接定义一个泛行类,来实现这样的行为。
        
         由于都是一些基础的知识,所以我没有给出具体的代码,只给出了一些思路,你自己先试着写一下,这些东西还是自己研究比较有趣啊!
    周雪峰
    2009年9月22日 10:58
    版主
  • 你好!
         方法有很多:
         1,可以把类型名作为参数传递进去,然后使用反射来构建实例
         2,可以直接定义一个泛行类,来实现这样的行为。
        
         由于都是一些基础的知识,所以我没有给出具体的代码,只给出了一些思路,你自己先试着写一下,这些东西还是自己研究比较有趣啊!
    周雪峰

    我想用system.type,可是不行,版主两个方法都给最简单的代码例子吧,谢谢版主了啊。
    2009年9月22日 11:03
  • 我给你写一下第一种吧,你可以参考一下:
    Dim
     instance As
     Assembly
    =Assembly.GetExecutingAssembly()
    Dim typeName As String ="YourNameSpace.A"
    Dim returnValue As Object

    returnValue = instance.CreateInstance(typeName)
    希望对你有帮助
    周雪峰
    2009年9月22日 11:33
    版主
  • 反射的方法是通过object o= System.Activator.CreateInstance(type);
    泛型方法
    C#
    public void Test<T>() where T :class
    {}

    Public Sub Test(Of T As Class)()

    End Sub


    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!http://hi.baidu.com/1987raymond
    2009年9月22日 11:35
    版主
  • class都继承同一接口,传接口的实例
    http://feiyun0112.cnblogs.com/
    2009年9月23日 0:49
    版主
  • lz的要求 是根据type 生成实例 并且在过程中使用

    您只需要



        Sub Work(Of T As New)()
            Dim obj As New T
    
        End Sub
    在使用的时候 
    Work (Of class1)()
    
    就可以了

    恭喜自己5星用户达成
    2009年9月23日 4:08
  •   Sub Work(ByVal T As System.Type)
            Dim obj = System.Activator.CreateInstance(T)


        End Sub

    也可以  但是这样就要


    class都继承同一接口,传接口的实例
    http://feiyun0112.cnblogs.com/
    比如都继承自  IMyClass


      Sub Work(ByVal T As System.Type)
            Dim obj  as  IMyClass= System.Activator.CreateInstance(T)


        End Sub



    恭喜自己5星用户达成
    2009年9月23日 4:16