日期:2014-05-19  浏览次数:21050 次

c# 在派生类方法中 调用基类的方法
class   a
{
        static   int   x=1;
        virtual   public   void   m(){Console.Write(x);}
}
class   b:a
{
        new   static   int   x=2;
        override   public   void   m(){base.m();}
}

b.m();       输出的是1;

把static去掉,输出2;

-------------------------------------------------

在派生类调用基类的方法.

非静态数据使用派生类的,

而静态数据却又使用基类的.

为什么要这样设定???

这样不是很混乱么?


------解决方案--------------------
不是静态数据和非静态数据的问题,而是你的 x在派生类是new过的,而方法是override的
------解决方案--------------------
你把override去掉就是一样的了,而static的不能override。所以没有什么混乱的地方。
------解决方案--------------------
而且你的命名很不规范,类名,public的方法首字母请大写
------解决方案--------------------
class a
{
static int x=1;
virtual public void m(){Console.Write(x);}
}
class b:a
{
new static int x=2;
override public void m(){this.m();}
}
------解决方案--------------------
刚才没看清楚,请给出所有结果所对应的代码……
------解决方案--------------------
我建议你把你的代码贴全面些
------解决方案--------------------
试试。是不是有编译警告?
class a
{
static int x = 1;
virtual public int m() { return x; }
}
class b : a
{
new static int x = 2;
override public int m() { return m(); }
}

------解决方案--------------------
---输出结果还是1啊。不是2---
static void CallA()
{
b b1= new b();
b1.m();
}

class a
{
int x = 1;
virtual public void m() { Console.WriteLine(x); }
}
class b : a
{
new int x = 2;
override public void m() { base.m(); }
}

------解决方案--------------------
using System;

class a
{
int x = 1;
virtual public void m() { Console.Write(x); }
}
class b : a
{
new int x = 2;
override public void m() { base.m(); }
}
public class Demo
{
public static void Main()
{
b b1 = new b();
b1.m();
}
}
===========================
输出1


using System;

class a
{
static int x = 1;
virtual public void m() { Console.Write(x); }
}
class b : a
{
new static int x = 2;
override public void m() { base.m(); }
}
public class Demo
{
public static void Main()
{
b b1 = new b();
b1.m();
}
}
=============================
输出1

你的Main函数怎么写的?

------解决方案--------------------
为什么 我总 是输出 1