继承、静态问题

Kation 2011-04-30 06:09:42
class a
{
public virturl string ABC{get;set;}
}


class b : a
{
public static new ABC{get;set;}
}

class c
{
b.ABC="123";
a[] a=new a[]{new b()};
foreach (var s in a)
{
Console.WriteLine("s.ABC");
}
}

这样,显示出来的是空值
怎么让输出的显示123?
...全文
117 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
isjoe 2011-05-02
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 caozhy 的回复:]
引用 9 楼 isjoe 的回复:
本来a、b是继承关系,但是new覆盖了a的唯一方法,就目前而言a、b毫无关系了,不存在任何继承和多态特性了。
使用override重写积累方法,即可输出123了。

另外重写override和覆盖new是完全不一样的。。。。

又一个概念不清的。

override、覆盖、重写是一个意思。

new 是隐藏。
[/Quote]

惭愧啊。。。。。说了好几年“覆盖”了。。。
Kation 2011-05-01
  • 打赏
  • 举报
回复
懂了,结贴
threenewbee 2011-04-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 isjoe 的回复:]
本来a、b是继承关系,但是new覆盖了a的唯一方法,就目前而言a、b毫无关系了,不存在任何继承和多态特性了。
使用override重写积累方法,即可输出123了。

另外重写override和覆盖new是完全不一样的。。。。
[/Quote]
又一个概念不清的。

override、覆盖、重写是一个意思。

new 是隐藏。
threenewbee 2011-04-30
  • 打赏
  • 举报
回复
静态方法和成员函数根本就没有继承/覆盖的关系。
Kation 2011-04-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 isjoe 的回复:]
本来a、b是继承关系,但是new覆盖了a的唯一方法,就目前而言a、b毫无关系了,不存在任何继承和多态特性了。
使用override重写积累方法,即可输出123了。

另外重写override和覆盖new是完全不一样的。。。。
[/Quote]
嗯,看来要该继承的东西成静态是没办法了……
isjoe 2011-04-30
  • 打赏
  • 举报
回复
本来a、b是继承关系,但是new覆盖了a的唯一方法,就目前而言a、b毫无关系了,不存在任何继承和多态特性了。
使用override重写积累方法,即可输出123了。

另外重写override和覆盖new是完全不一样的。。。。
threenewbee 2011-04-30
  • 打赏
  • 举报
回复
一个好的编译器是帮助程序员把正确的事情做正确的。

C#做不到的事情很多。
比如 int i = 1 + 1; 它是没有办法让 1+1=3 的。
Kation 2011-04-30
  • 打赏
  • 举报
回复
不好意思啊,我的意思就是3楼改过的
由于写问题的时候太急了,举例子漏写了个void


是不是没办法做到?
我姓区不姓区 2011-04-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 caozhy 的回复:]

什么乱七八糟的程序。
[/Quote]
同意……楼主知道自己在写什么吗……
threenewbee 2011-04-30
  • 打赏
  • 举报
回复
什么乱七八糟的程序。
gai21 2011-04-30
  • 打赏
  • 举报
回复

class a
{
public virtual string ABC { get; set; }
}


class b : a
{
public static new string ABC { get; set; }
}

class c
{
void ccc()
{
b.ABC = "123";
a[] f = new a[] { new b() };
foreach (var s in f)
{
Console.WriteLine(s.ABC);
}
}
}

lz的代码最起码要改成这样才能编译啊,首先f是一个a类型的数组,b是a的子类,所以可以存储在f中,但是b.ABC是静态属性,f中存储的是对象,所以s是不能访问到b.ABC的,s.ABC访问的是a.ABC,a.ABC是一个非静态的属性。
蛤十一 2011-04-30
  • 打赏
  • 举报
回复
LZ你这段程序能编译吗?
请叫我卷福 2011-04-30
  • 打赏
  • 举报
回复
foreach中s是对象 要输出"ABC=123"需要用 类名.ABC

还有你a 是类名 怎么又作数组名

110,535

社区成员

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

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

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