c#w问题,无发重写,请看甚么问题,多谢

来源:百度知道 编辑:UC知道 时间:2024/06/14 00:06:30
using System;

namespace ConsoleApplication1
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>

class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
A a=new A();
B b=new B();
a.fun1(b);
b.fun1(a);
}
}
}
public class A

{
public int fun1(int i)
{
Console.WriteLine(i);
}
public int fun2(A a)
{
a.fun1(1);
fun1(5);

}
}
public class B: A
{
public override int fun()
{
base.fun1(i+1);
}
}
这位兄台介绍些方法,c#
你说的挺全面的,请指教
还有,我在主函数里不是定义了a,b吗,分别属于A,B类
我就是输出一下结果就行了,中间可能确实有些问题
请指教,moqun188@126,com

问题好像蛮多

1
class A 中 fun1 和 fun2 缺少返回值 如果本意是不想返回 那就类似这样写 public void fun1(int i) { ... }

2
class B 中 你 override 了 fun 方法 可是基类 A 中并没有 fun 方法可以被重写 你可以改成 public override int fun1() { ... }

但是即使你把 fun 改为了 fun1 也是无法通过编译的
因为只能对基类中声明为 virtual 或 abstract 或 override 的方法用 override 进行重写

你可以把A类中的 fun1 方法声明为 public virtral void fun1(int i)
或是把B类中的方法声明为 public new void fun1(int i) 进行覆盖

3
你的 fun1 方法的参数是 int 类型 可你在 Main 方法中却用了 a.fun1(b) 和 b.fun1(a) 这怎么可能通过编译

C# 并不难 我也是这么一路错误地学过来的 呵

答案补充:
你只定义了一个public int fun1(int i) 那么在调用fun1时 就必须传个int类型的参数 可你在Main中用的a.fun1(b); 这里的b并不是int类型 这通不过编译

但是你可以调用 a.fun2(b); 因为你在class A中有个public int fun2(A a) 方法 虽然参数是A类型 而b是B类的实例 但B类是继承自A类的 可以隐式转化为A类型 所以b满足参数要求