寻求 高手 支招。

Oo_o_oO 2012-04-09 12:57:14
C# 就是类型与 实体 的语言,可以说其本质不同与C。

类型:描述一种类别的物体有的东西, ------类
实体:就照这个描述造一个这样的物体。 ------对象


现在,
  我写 int i; --然后光标移到int 中间 右键转到定义。

可以看到如下代码:


namespace System
{
// 摘要:
// Represents a 32-bit signed integer.
[Serializable]
[ComVisible(true)]
public struct Int32 : IComparable, IFormattable, IConvertible, IComparable<int>, IEquatable<int>
{
public const int MaxValue = 2147483647;
public const int MinValue = -2147483648;
public int CompareTo(int value);
public int CompareTo(object value);
public bool Equals(int obj);
public override bool Equals(object obj);
public override int GetHashCode();
public TypeCode GetTypeCode();
public static int Parse(string s);
public static int Parse(string s, IFormatProvider provider);
public static int Parse(string s, NumberStyles style);
public static int Parse(string s, NumberStyles style, IFormatProvider provider);
public override string ToString();
public string ToString(IFormatProvider provider);
public string ToString(string format);
public string ToString(string format, IFormatProvider provider);
public static bool TryParse(string s, out int result);
public static bool TryParse(string s, NumberStyles style, IFormatProvider provider, out int result);
}
}


原来int 是一个结构体,
int 就是 System.Int32;

也就是说:--下面这两个代码是等价的。
 int i = 10; //1
System.Int32=10;//2

可能是 在 某处有如下代码:
using int = System.Int32;
//可是我又没有发现啊,在何处??

问问:
一问:--下面这两条语句是不是等价的?
public const int MaxValue = 2147483647;//
public static const int MaxValue = 2147483647;//


二问:
在一个非静态类中, 一定不能有 [类型为当前类的非静态属性];---这句话正解吗?
比如:
	//错误的类定义:
public class errorClass
{
//不能出现此属性:
private errorClass ec=new errorClass();
}

这种写法是错的,会出现黑洞。

三问:
	Type type = Type.GetType("ClassA", false, true);
object o = System.Activator.CreateInstance(type);
//就可以得到 一个类型为[ClassA]的 对象 ,
//现在,我有一个现成的类[ClassB] ,要如何才能让对象 A 继承 Class 的方法与属性?
//求 指引!


本人没有多少分,就此一点,
希望高手不要吝教, 小弟始终 洗耳巷听 。

谢谢大家回复!!!!


有更好的意见,想法,请发表!!!

...全文
192 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
家鸣 2012-04-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

第三问是这样的:
之前已定义了ClassA ,ClassB;两个类;
现在,我可以用C# code
Type type = Type.GetType("ClassA", false, true);
object o = System.Activator.CreateInstance(type);

的方式创建对象o。--但这不是我想要的,
我想要的是:
……
[/Quote]
做不到,但实现这样的功能不难,请参考 适配器模式。
Oo_o_oO 2012-04-09
  • 打赏
  • 举报
回复
坐等,顶起。
orochiheart 2012-04-09
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
警告楼上,不要倒分,否则XHW。
[/Quote]
怎么知道的? IP?
Oo_o_oO 2012-04-09
  • 打赏
  • 举报
回复
第三问是这样的:
之前已定义了ClassA ,ClassB;两个类;
现在,我可以用
    Type type = Type.GetType("ClassA", false, true);
object o = System.Activator.CreateInstance(type);
的方式创对象o。--但这不是我想要的,
我想要的是:
让对象o 同时有ClassA 的方法属性,又有ClassB 的方法属性,
就好像我声明一个类型 ClassC 同时继承于ClassA,ClassB ,
实际上,我没有定义ClassC 类型,但是ClaasC 类型 的方法与属性 已确定,为 ClassA,ClassB 所有的方法属性。


这个做不做得到?

Oo_o_oO 2012-04-09
  • 打赏
  • 举报
回复
---- 补充一下:
第一个问题是 代码写漏了:
本意是 :
 int i = 10; //1
System.Int32 i=10;//2
上下两句是不是等价的?

这个是我的疑问:----不是很确定,
  public const int MaxValue = 2147483647;//
public static const int MaxValue = 2147483647;//
上下两句是不是等价的?

第三问是这样的:
之前已定义了ClassA ,ClassB;两个类;
现在,我可以用
    Type type = Type.GetType("ClassA", false, true);
object o = System.Activator.CreateInstance(type);
的方式创他对象o
但是,我想做到,让对象o 同时有ClassA 的方法属性,又有ClassB 的方法属性,
就好像我声明一个类型 ClassC 同时继承于ClassA ClassB ,
实际上,我 定义ClassC 类型,但是ClaasC 类型 的方法与属性 已确定为 ClassA,ClassB 所有的方法。
做不做得到?



threenewbee 2012-04-09
  • 打赏
  • 举报
回复
警告楼上,不要倒分,否则XHW。
hetengfei_ 2012-04-09
  • 打赏
  • 举报
回复
一答:
我认为是,[const][static]可以混用的,
static 是指的表示静态的,表示用static 修饰过的方法或属性 是属于类本身的,不是单个对象特有,而是 全部对象共用。不会给每个对象一个单独的常量。
const 是表示常量,一旦声明就不能修改。当然类中的常量也是全部对象共用的,不会给每个对象一个单独的常量。

以下参考:
const与static的区别
const与readonly
const static 可以 共用?
stonespace 2012-04-09
  • 打赏
  • 举报
回复
第三问,除非ClassA是ClassB的派生类,否则无法让ClassA的实例拥有ClassB的属性和方法,

一个对象只能是一个类的实例,不能同时是两个没有派生关系的类的实例,
stonespace 2012-04-09
  • 打赏
  • 举报
回复
第二问:如果只是这样:
public class errorClass
{
//不能出现此属性:
private errorClass ec=null;
}

这样是可以的,但不能new,
youzelin 2012-04-09
  • 打赏
  • 举报
回复
答答

一答:const 和 static 不能一起使用。
二答:会产生递归无限循环生成 errorClass 类对象。
三答:一个类只能有一个 parent class,但可以实现多个 interface。根据你的需求,你应该把 ClassA, ClassB 定义成 接口。

public interface IClassA
{
int GetSomething();
}
public interface IClassB
{
int GetAnotherThing();
}
public class ClassC : IClassA, IClassB
{
public int GetSomething()
{
//........
}
public int GetAnotherThing()
{
//........
}
}
Marky 2012-04-09
  • 打赏
  • 举报
回复
先纠正你一个错误
int i = 10; //1
System.Int32=10;//2
//2显然是错误的语法,Int32是结构体没错,但也只是定义的一个类型,直接给类型赋值,是异常的。

然后回答第一问:用const 修饰符声明的变量的值在编译时给定,并且默认为static。所以,两者等价
第二问:当然不能,这不就等于一直循环创建自己的实体,形成死循环么?
第三问:为什么不能在定义ClassA的时候,直接用Class ClassA:ClassB的形式来继承ClassB的方法和属性呢?

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧