我的意思是类可以产生实例
但是一个类的实例变量不为什么不能产生实例呢,
python里的做法是:不管什么,只要他是type类的实例,他就可以产生实例(即int就是type的实例)
但是C#好像完全不是这样的做法,谁知道产生实例的前提条件是什么?
得到解答送100分

解决方案 »

  1.   

    但是一个类的实例变量不为什么不能产生实例呢,
    ---------------------
    这这句话就可以看出你对“类”和“实例”的概念还是一团浆糊...好好看看书...所有类和结构都可以在声明时或赋值时实例化,只有抽象类不能直接实例化...如...ClassA A=new ClassA();//实例化ClassA
    ClassB B=null;//尚未实例化
    B=new ClassB();//实例化ClassB
    AbstractA B=new DerivedAbstractA();//通过派生类实例化抽象类AbstractA
    AbstractA A=AbstractFactory.Create();//通过工厂方法实例化抽象类AbstractA
    int i=0;//实例化int
      

  2.   

    这这句话就可以看出你对“类”和“实例”的概念还是一团浆糊...好好看看书... 所有类和结构都可以在声明时或赋值时实例化,只有抽象类不能直接实例化...如... ClassA A=new ClassA();//实例化ClassA 
    ClassB B=null;//尚未实例化 
    B=new ClassB();//实例化ClassB 
    AbstractA B=new DerivedAbstractA();//通过派生类实例化抽象类AbstractA 
    AbstractA A=AbstractFactory.Create();//通过工厂方法实例化抽象类AbstractA 
    int i=0;//实例化int
    ========================================
    我想你误解我的意思了
    我之前是用python的
    在python中,类本身也是对象
    即类可以是其他类的实例
    打个比方:
    定义一个类class class1{}
    在定义的同时,系统自动将class1设置为type类的实例
    也就是说class1是可以作为变量传递
    即 a=class1在C#中,我没有发现这种机制
    因此就有很多的疑问
    也许在C#中类就是类
    实例就是实例
    但是C#不也是说完全面向对象的吗
    而且类里面也是有函数的,或许C#里的类也是实例,只是我们不知道而已
      

  3.   

    我没有误解你的意思...不要拿python来跟C#比...类就是类,实例就是实例,它们都是对象...类是实例的抽象,实例是类的具象...这才是完全面向对象的概念...你需要去找本OO的入门书好好看看...
      

  4.   

    在C#中,类型也是一种对象,这个没错,所有的类相当於是System.Type的实例.
      

  5.   

    从.net语义的角度来说,当一个类被声明为Static时,它是不能用任何形式的new来实例化的。Static类是在程序集导入的时候,CLR在内存中创建的在这个应用程序域中共享的数据段。从这个意义上来说,Static是会被CLR自动实例化的,但你不可以。从一般意义上讲,我们常说的类实例化,指的是CLR分配一段内存,用来存放这个类的每一个实例变量(但不包括方法)。当我们调用一个方法的时候,CLR会先创建一个活动(Activity),再分配一段内存(上下文Context)来实例化这个方法。这个所谓的活动会包括涉及到的实体变量和函数上下文。举个例子来说,一个静态的类的函数被2个用户同时来调,如果2个用户来自不同的应用程序域,那么他们调用的是不同的2个类实例,当然不会有任何影响。如果2个用户来自同一个应用程序的域,那么由于静态类的实体变量是共享的,就会出现同步的问题。但是在函数里定义的变量,应为分属不同的实例不同的上下文,所以他们之间也是没有影响的。
      

  6.   

    我没有误解你的意思...不要拿python来跟C#比... 类就是类,实例就是实例,它们都是对象...类是实例的抽象,实例是类的具象...这才是完全面向对象的概念... 你需要去找本OO的入门书好好看看...
    ===============================
    看来你很顽固,现在.NET4.0都增加了动态语言功能了
    至于我要不要去找本oop的书看,呵呵
    如果你没了解我的问题的话
    还是先仔细看我的问题为妙
    不过弄懂我的问题之前,你可能要对.NET的类型模型有一定的了解
    不过很可能你是对的,在我用的.NET2.0中并没有动态语言机制
    所以很有可能int类型并不是任何类的实例最后感叹下你的那句话“类就是类,实例就是实例”,看来你真的是只接触过静态语言
      

  7.   


    但是但是用isinstanceoftype的时候,为false
    type本身是个抽象类
    在运行时主要是runtimetype
    但是测试的结果是int类型并不是runtimetype的实例
    费解
      

  8.   

    int c=12;
    c.GetType().IsInstanceOfType(c.GetType().GetType())
    这句话返回false
      

  9.   

    C#和Python这种脚本语言还是很不一样的。C#中,你new 一个对象就是产生了一个实例。和Python里面不一样。
      

  10.   

    顽固的是你...动态语言不是未来,.NET引入动态语言特性也不是为了推翻静态语言...更与完全面向对象毫无关系...引用一句话...Static typing where possible, dynamic typing where necessary.
      

  11.   

    这个结果当然是false...int继承自ValueType,ValueType继承自Object...
      

  12.   

    大概能明白楼主的意思:
    1:C#用Type来解决,任何类或实例都可以获得它的Type 实例,类用typeof(yourClass), 实例用obj.GetType();
    2:关于楼主举例,C#一般这样搞(随便举例):
      class Class1{}
      class Class2
     {
        //1 提供外部调用
         public Type type1{get;set}//类
         public object CreateInstance()//动态构造对象
        {
            return  System.Activator.CreateInstance(type1);
        }   //2 动态对象直接在Class2实例内
       private object _instance = null;
       public Type type2{get;set}//类
       public object Instance()//动态构造对象
       {
            get
           { 
               _instance  = _instance  ?? System.Activator.CreateInstance(type2);
                return  _instance;
        }
     }Class2 class2 = new Class2();
    class2.type = typeof(Class1);
    Class1 class = class2.CreateInstance();
    3: 以上其实及是反射的知识,关于类型、对象、运行时等方面C#很强很强。
    4: 个人觉得如有要掌握好C#,必须优先学习: 反射、泛型、集合、字典等。
      

  13.   


    我的意思是按逻辑在讲,这句话会返回true
    但是返回了false,说明int可能不是实例,明白?
    另外针对什么动态语言的,你用了就会知道
    没有调查就没有发言权
      

  14.   

    修正下
    大概能明白楼主的意思:
    1:C#用Type来解决,任何类或实例都可以获得它的Type 实例,类用typeof(yourClass), 实例用obj.GetType();
    2:关于楼主举例,C#一般这样搞(代码不一定完全正确):
      class Class1{}
      class Class2
     {
        //1 提供外部调用
         public Type type1{get;set}//类
         public object CreateInstance()//动态构造对象
        {
            return  System.Activator.CreateInstance(type1);
         }   //2 动态对象直接在Class2实例内
       private object _instance = null;
       public Type type2{get;set}//类
       public object Instance()//动态构造对象
       {
            get
           { 
               _instance  = _instance  ?? System.Activator.CreateInstance(type2);
                return  _instance;
        }
     }
    Class2 class2 = new Class2();
    class2.type = typeof(Class1);
    Class1 class11 = (Class1 )class2.CreateInstance();
    Class1 class12 = (Class1 )class2.Instance;
    3: 以上其实就是反射的知识,关于类型、对象、运行时等方面C#很强很强。
    4: 个人觉得如要掌握好C#,必须优先学习: 反射、泛型、集合、字典等。
      

  15.   

    我的意思是按逻辑在讲,这句话会返回true 
    但是返回了false,说明int可能不是实例,明白?
    -------------
    ValueType == Object?这是什么逻辑?实例这个词是什么意思你真的明白了?我用动态语言的时候,.NET、python都还没出生呢...算了,懒得再说了...你继续钻牛角尖吧...
      

  16.   

    invokemember不是只有你会用的
    自己不懂还硬要乱扯,真是莫名其妙
      

  17.   

    lz 是想要这个?
    // A a= new A();
                A a=(A)Activator.CreateInstance(typeof(A));            a.x = 10;
                MessageBox.Show(a.x.ToString());            A b = (A)Activator.CreateInstance(a.GetType());            b.x = 20;
                MessageBox.Show(b.x.ToString());
      

  18.   

    不是我没描述清楚
    是你根本没看懂
    你就一个劲的认为类就是类,不是实例
    然后就是鸡同鸭讲了
    而事实上我找到的答案.NET的类也是实例
    只不过比较特殊的基类
    然后我也可能找到答案了
    答案可能就是type的实例才能产生实例,和python几乎一模一样
    二不是你所说的类就是类,实例就是实例
    楼上的那位启发了我一下
      

  19.   

    总结一下:
    刚才说的话不准确,已下是经过严格的测试的这个问题的答案。
    Int,string,class1….等均是runtimeType的实例,runtimeType的实例为本身,runtimeType的父类为object(实际并不是,但是可以这么理解),object没有父类,一切类都是object的子类。和python几乎一模一样。但是C#复杂的多,但是基本架构还是这样。因此猜想:以下是猜想:因为Python中只有runtimeType的实例才能产生实例,C#的模型和python一模一样,
    因此C#很可能也是只有runtimeType的实例才能产生实例。
    但是由于微软将runtimeType封装了,无法直接测试结论。
      

  20.   


    呵呵,不敢不敢
    接触C#的时间不长
    原来用的东西都是开源的,用什么疑问到xxx.org网站上一找,文档多如牛毛
    现在有个客户要求用.NET,好家伙,在msdn找了半天,什么都没有
    只好注册个账号到这里问,结果被人骂说要去补习oop,sigh