问题描述
C#就是类型与实体的语言,可以说其本质不同与C。类型:描述一种类别的物体有的东西,------类实体:就照这个描述造一个这样的物体。------对象
现在,我写inti;--然后光标移到int中间右键转到定义。
可以看到如下代码:namespaceSystem{//摘要://Representsa32-bitsignedinteger.[Serializable][ComVisible(true)]publicstructInt32:IComparable,IFormattable,IConvertible,IComparable<int>,IEquatable<int>{publicconstintMaxValue=2147483647;publicconstintMinValue=-2147483648;publicintCompareTo(intvalue);publicintCompareTo(objectvalue);publicboolEquals(intobj);publicoverrideboolEquals(objectobj);publicoverrideintGetHashCode();publicTypeCodeGetTypeCode();publicstaticintParse(strings);publicstaticintParse(strings,IFormatProviderprovider);publicstaticintParse(strings,NumberStylesstyle);publicstaticintParse(strings,NumberStylesstyle,IFormatProviderprovider);publicoverridestringToString();publicstringToString(IFormatProviderprovider);publicstringToString(stringformat);publicstringToString(stringformat,IFormatProviderprovider);publicstaticboolTryParse(strings,outintresult);publicstaticboolTryParse(strings,NumberStylesstyle,IFormatProviderprovider,outintresult);}}
原来int是一个结构体,int就是System.Int32;也就是说:--下面这两个代码是等价的。inti=10;//1System.Int32=10;//2
可能是在某处有如下代码:usingint=System.Int32;//可是我又没有发现啊,在何处??
问问:一问:--下面这两条语句是不是等价的?publicconstintMaxValue=2147483647;//publicstaticconstintMaxValue=2147483647;//
二问:在一个非静态类中,一定不能有[类型为当前类的非静态属性];---这句话正解吗?比如://错误的类定义:publicclasserrorClass{//不能出现此属性:privateerrorClassec=newerrorClass();}
这种写法是错的,会出现黑洞。三问:Typetype=Type.GetType("ClassA",false,true);objecto=System.Activator.CreateInstance(type);//就可以得到一个类型为[ClassA]的对象,//现在,我有一个现成的类[ClassB],要如何才能让对象A继承Class的方法与属性?//求指引!
本人没有多少分,就此一点,希望高手不要吝教,小弟始终洗耳巷听。谢谢大家回复!!!!有更好的意见,想法,请发表!!!
解决方案
本帖最后由 Oo_o_oO 于 2012-04-09 01:06:49 编辑
解决方案二:
先纠正你一个错误inti=10;//1System.Int32=10;//2//2显然是错误的语法,Int32是结构体没错,但也只是定义的一个类型,直接给类型赋值,是异常的。然后回答第一问:用const修饰符声明的变量的值在编译时给定,并且默认为static。所以,两者等价第二问:当然不能,这不就等于一直循环创建自己的实体,形成死循环么?第三问:为什么不能在定义ClassA的时候,直接用ClassClassA:ClassB的形式来继承ClassB的方法和属性呢?
解决方案三:
第二问:如果只是这样:publicclasserrorClass{//不能出现此属性:privateerrorClassec=null;}这样是可以的,但不能new,
解决方案四:
第三问,除非ClassA是ClassB的派生类,否则无法让ClassA的实例拥有ClassB的属性和方法,一个对象只能是一个类的实例,不能同时是两个没有派生关系的类的实例,
解决方案五:
----补充一下:第一个问题是代码写漏了:本意是:inti=10;//1System.Int32i=10;//2
上下两句是不是等价的?这个是我的疑问:----不是很确定,publicconstintMaxValue=2147483647;//publicstaticconstintMaxValue=2147483647;//
上下两句是不是等价的?第三问是这样的:之前已定义了ClassA,ClassB;两个类;现在,我可以用Typetype=Type.GetType("ClassA",false,true);objecto=System.Activator.CreateInstance(type);
的方式创他对象o但是,我想做到,让对象o同时有ClassA的方法属性,又有ClassB的方法属性,就好像我声明一个类型ClassC同时继承于ClassAClassB,实际上,我定义ClassC类型,但是ClaasC类型的方法与属性已确定为ClassA,ClassB所有的方法。做不做得到?
解决方案六:
第三问是这样的:之前已定义了ClassA,ClassB;两个类;现在,我可以用Typetype=Type.GetType("ClassA",false,true);objecto=System.Activator.CreateInstance(type);
的方式创建对象o。--但这不是我想要的,我想要的是:让对象o同时有ClassA的方法属性,又有ClassB的方法属性,就好像我声明一个类型ClassC同时继承于ClassA,ClassB,实际上,我没有定义ClassC类型,但是ClaasC类型的方法与属性已确定,为ClassA,ClassB所有的方法属性。这个做不做得到?
解决方案七:
该回复于2012-04-09 11:55:51被版主删除
解决方案八:
该回复于2012-04-09 11:55:58被版主删除
解决方案九:
坐等,顶起。
解决方案十:
引用5楼的回复:
第三问是这样的:之前已定义了ClassA,ClassB;两个类;现在,我可以用C#codeTypetype=Type.GetType("ClassA",false,true);objecto=System.Activator.CreateInstance(type);的方式创建对象o。--但这不是我想要的,我想要的是:……
做不到,但实现这样的功能不难,请参考适配器模式。
解决方案十一:
答答一答:const和static不能一起使用。二答:会产生递归无限循环生成errorClass类对象。三答:一个类只能有一个parentclass,但可以实现多个interface。根据你的需求,你应该把ClassA,ClassB定义成接口。publicinterfaceIClassA{intGetSomething();}publicinterfaceIClassB{intGetAnotherThing();}publicclassClassC:IClassA,IClassB{publicintGetSomething(){//........}publicintGetAnotherThing(){//........}}
解决方案十二:
一答:我认为是,[const][static]可以混用的,1·static是指的表示静态的,表示用static修饰过的方法或属性是属于类本身的,不是单个对象特有,而是全部对象共用。不会给每个对象一个单独的常量。2·const是表示常量,一旦声明就不能修改。当然类中的常量也是全部对象共用的,不会给每个对象一个单独的常量。以下参考:
解决方案十三:
警告楼上,不要倒分,否则XHW。
解决方案十四:
引用12楼的回复:
警告楼上,不要倒分,否则XHW。
怎么知道的?IP?