帮我看种语法叫什么?

kindtoadsd 2010-01-17 08:57:30
public class aa
{

private IList<aa> bb;
public IList<aa> BB
{
get {return bb;}
set {bb = BB;}
}
}

就是在类的定义中用到类作为参数,这叫什么?是递归吗?


谢谢!
...全文
240 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
kindtoadsd 2010-01-17
  • 打赏
  • 举报
回复
楼上是高人,一眼看出我用面向过程写了20年程序
vrhero 2010-01-17
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 kindtoadsd 的回复:]
如果是在类型体外用泛型,我能理解,现在是在类型体内用泛型,我不理解。哪不是你在用这个类型时,还没有完成这个类型的定义呢。  也就是说,有个盲人摸到大象的一条腿时就说这头象我要了,至于这头象是三条腿还是两条腿他都得要,是不是这个意思?
[/Quote]
没有什么“体内体外”,你的思维还停留在解释型语言和面向过程编程的年代,面向对象的类不是你想象的“顺序解释”的...不存在“还没有完成这个类型的定义”这种概念,“没完成的定义”无法通过编译,编辑期间的类跟堆栈还沾不上边...

实际上一个属性会被编译为两个方法,IList<aa> get_BB()和void set_BB(IList<aa> value)...在编译后这个类型是确定的...

你的问题其实跟泛型无关,你不转换下思维换成如下代码你一样无法理解...建议你去学学编译原理和OOP...

public class aa
{

private aa bb;
public aa BB
{
get {return bb;}
set {bb = BB;}
}
}
alicelijing1 2010-01-17
  • 打赏
  • 举报
回复
学习学习!
boringame 2010-01-17
  • 打赏
  • 举报
回复
public class 人类{
public 人类 父亲;
public 人类 母亲;
}

人类里面包含人类,
这样的例子可以理解吗?
放到泛型上一样的。
kingcsx666 2010-01-17
  • 打赏
  • 举报
回复
泛型

包装对象来的
huangyoukuo 2010-01-17
  • 打赏
  • 举报
回复
新手 不太明白
kindtoadsd 2010-01-17
  • 打赏
  • 举报
回复
我是看了别人的代码,能通,我是想理解一下。
wsbd10086 2010-01-17
  • 打赏
  • 举报
回复
你先跑一下能否通过
kindtoadsd 2010-01-17
  • 打赏
  • 举报
回复
如果是在类型体外用泛型,我能理解,现在是在类型体内用泛型,我不理解。哪不是你在用这个类型时,还没有完成这个类型的定义呢。 也就是说,有个盲人摸到大象的一条腿时就说这头象我要了,至于这头象是三条腿还是两条腿他都得要,是不是这个意思?
RFEZGC 2010-01-17
  • 打赏
  • 举报
回复
3
maomao90 2010-01-17
  • 打赏
  • 举报
回复
泛型
qqshenyunzcz 2010-01-17
  • 打赏
  • 举报
回复
题目够吸引人的!
泛型!规定这个集合中只能存你规定的类型,取出来时就比较方便了,能直接得到取出对象的属性!用起来不用再去转化!!
sosoyiyi 2010-01-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 kindtoadsd 的回复:]
我是说递归的时候需要把调用地址压栈
[/Quote]
可是这没有递归啊
kindtoadsd 2010-01-17
  • 打赏
  • 举报
回复
我是说递归的时候需要把调用地址压栈
wangan2008 2010-01-17
  • 打赏
  • 举报
回复
牛逼的泛型
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 kindtoadsd 的回复:]
谢谢回复,用类自己作为自己内部的参数,实例化时怎么办?没有栈吗?
[/Quote]

这个时候在概念运用上谈不上什么堆栈概念。系统运行时首先动态产生了 IList<aa> 代码,就好象你手动写了一个新类型的代码(假设起名叫做 IList_with_aa )并且编译到程序里。
sosoyiyi 2010-01-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 kindtoadsd 的回复:]
谢谢回复,用类自己作为自己内部的参数,实例化时怎么办?没有栈吗?
[/Quote]
这个并没有用类自己作为自己内部的参数,privte IList <aa> bb定义了一个bb泛型,类型是类aa,
  public  IList <aa>  BB 
{
get {return bb;}
set {bb = BB;}
}

定义了一个BB属性,他返回了一个IList<aa>泛型属性,也就是bb
实际应用的时候,当你调用aa.BB=value的时候,那么bb的值就是value,当然,value也应该是aa类型的
  • 打赏
  • 举报
回复
泛型就是“类型的函数”,它的结果也还是一个类型。

离散数学上这就叫做映射。

就好象你计算一个数的立方根,这个函数结果还是一个数。泛型跟它完全一样,只不过规定参数必须是system.Type。.net框架在运行时根据你输入的参数的不同而产生了不同的一个结果类型,例如IList<string>、IList<int>、IList<TextBox>这就产生了三个不同的新类型。

在定义时,IList<T>实际上只是定义映射计算的规则。只有在运行时,给出了T的实际参数值,.net才产生了运用这个规则产生了实际的类型代码。

记住,不要把参数类型跟泛型结果类型混淆,就不会糊涂了。
Pro_ah 2010-01-17
  • 打赏
  • 举报
回复
泛型
kindtoadsd 2010-01-17
  • 打赏
  • 举报
回复
谢谢回复,用类自己作为自己内部的参数,实例化时怎么办?没有栈吗?
加载更多回复(8)

111,119

社区成员

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

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

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