我的意思是类可以产生实例
但是一个类的实例变量不为什么不能产生实例呢,
python里的做法是:不管什么,只要他是type类的实例,他就可以产生实例(即int就是type的实例)
但是C#好像完全不是这样的做法,谁知道产生实例的前提条件是什么?
得到解答送100分
但是一个类的实例变量不为什么不能产生实例呢,
python里的做法是:不管什么,只要他是type类的实例,他就可以产生实例(即int就是type的实例)
但是C#好像完全不是这样的做法,谁知道产生实例的前提条件是什么?
得到解答送100分
---------------------
这这句话就可以看出你对“类”和“实例”的概念还是一团浆糊...好好看看书...所有类和结构都可以在声明时或赋值时实例化,只有抽象类不能直接实例化...如...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
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#里的类也是实例,只是我们不知道而已
===============================
看来你很顽固,现在.NET4.0都增加了动态语言功能了
至于我要不要去找本oop的书看,呵呵
如果你没了解我的问题的话
还是先仔细看我的问题为妙
不过弄懂我的问题之前,你可能要对.NET的类型模型有一定的了解
不过很可能你是对的,在我用的.NET2.0中并没有动态语言机制
所以很有可能int类型并不是任何类的实例最后感叹下你的那句话“类就是类,实例就是实例”,看来你真的是只接触过静态语言
但是但是用isinstanceoftype的时候,为false
type本身是个抽象类
在运行时主要是runtimetype
但是测试的结果是int类型并不是runtimetype的实例
费解
c.GetType().IsInstanceOfType(c.GetType().GetType())
这句话返回false
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#,必须优先学习: 反射、泛型、集合、字典等。
我的意思是按逻辑在讲,这句话会返回true
但是返回了false,说明int可能不是实例,明白?
另外针对什么动态语言的,你用了就会知道
没有调查就没有发言权
大概能明白楼主的意思:
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#,必须优先学习: 反射、泛型、集合、字典等。
但是返回了false,说明int可能不是实例,明白?
-------------
ValueType == Object?这是什么逻辑?实例这个词是什么意思你真的明白了?我用动态语言的时候,.NET、python都还没出生呢...算了,懒得再说了...你继续钻牛角尖吧...
自己不懂还硬要乱扯,真是莫名其妙
// 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());
是你根本没看懂
你就一个劲的认为类就是类,不是实例
然后就是鸡同鸭讲了
而事实上我找到的答案.NET的类也是实例
只不过比较特殊的基类
然后我也可能找到答案了
答案可能就是type的实例才能产生实例,和python几乎一模一样
二不是你所说的类就是类,实例就是实例
楼上的那位启发了我一下
刚才说的话不准确,已下是经过严格的测试的这个问题的答案。
Int,string,class1….等均是runtimeType的实例,runtimeType的实例为本身,runtimeType的父类为object(实际并不是,但是可以这么理解),object没有父类,一切类都是object的子类。和python几乎一模一样。但是C#复杂的多,但是基本架构还是这样。因此猜想:以下是猜想:因为Python中只有runtimeType的实例才能产生实例,C#的模型和python一模一样,
因此C#很可能也是只有runtimeType的实例才能产生实例。
但是由于微软将runtimeType封装了,无法直接测试结论。
呵呵,不敢不敢
接触C#的时间不长
原来用的东西都是开源的,用什么疑问到xxx.org网站上一找,文档多如牛毛
现在有个客户要求用.NET,好家伙,在msdn找了半天,什么都没有
只好注册个账号到这里问,结果被人骂说要去补习oop,sigh