在C#中要实现一个类继承多个父类有什么办法

在C#中要实现一个类继承多个父类有什么办法,不要跟我说不可以,我有朋友说可以。... 在C#中要实现一个类继承多个父类有什么办法,
不要跟我说不可以,
我有朋友说可以。
展开
 我来答
许诗文00
推荐于2017-12-16 · TA获得超过4290个赞
知道小有建树答主
回答量:425
采纳率:100%
帮助的人:26.6万
展开全部
C#中的父类与子类的继承关系与C和C++中的类似,这里先阐述最重要的一点:假如子类继承了父类,那么子类可以强制转换为父类,并且保证编译和运行都不出错;但是父类强制转换成子类的时候,编译可以通过运行通不过。请看如下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace FatherAndSon
{
class ClassA
{
static void Main(string[] args)
{
//编译和运行都能通过
ClassB b = new ClassB();
ClassA a = (ClassA)b;

//编译能通过,运行通不过
ClassA aa = new ClassA();
ClassB bb = (ClassB)aa;
}

}

class ClassB : ClassA
{

}
}
实际上:将子类强制转换为父类之后,在用这个父类强制转换为另外一个子类的时候编译和运行也都能通过;只是如果将父类直接转换为子类的时候运行会出错,请看如下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace FatherAndSon
{
class ClassC
{
static void Main(string[] args)
{
//先将子类强制转换为父类,然后用此父类强制转换为另外一个子类(通过)
ClassB b = new ClassB();
ClassA a = (ClassA)b;
ClassB bbbbb = (ClassB)a;

//(将父类直接强制转换为子类)编译能通过,运行通不过
ClassA aa = new ClassA();
ClassB bb = (ClassB)aa;
}

}

class ClassA
{

}
class ClassB : ClassA
{

}
}

另外一个值得非常注意的地方是:无论是子类强制转换赋给父类,还是父类(由子类强转得到)强制转换为子类;类对象是根据声明的类型(子类或父类)去调用其变量和函数的,与赋值无关。请看如下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace FatherAndSon
{
class ClassC
{
static void Main(string[] args)
{
//先将子类强制转换为父类,然后用此父类强制转换为另外子类(通过)
ClassB b = new ClassB();
b.PrintFunc();
Console.WriteLine(b.myStr);

ClassA a = (ClassA)b;
a.PrintFunc();
Console.WriteLine(a.myStr);

ClassB bbbbb = (ClassB)a;
bbbbb.PrintFunc();
Console.WriteLine(bbbbb.myStr);

//(将父类直接强制转换为子类)编译能通过,运行通不过
//ClassA aa = new ClassA();
//ClassB bb = (ClassB)aa;
//bb.PrintFunc();
}

}

class ClassA
{
public string myStr;
public ClassA()
{
myStr = "Hello, This is myStr in ClassA";
}

public void PrintFunc()
{
Console.WriteLine("This is the Print Function in ClassA");
}
}

class ClassB : ClassA
{
public string myStr;
public ClassB()
{
myStr = "Hello, This is myStr in ClassB";
}
public void PrintFunc()
{
Console.WriteLine("This is the Print Function in ClassB");
}
}
}
上面代码输出的结果为:
This is the Print Function in ClassB
Hello, This is myStr in ClassB
This is the Print Function in ClassA
Hello, This is myStr in ClassA
This is the Print Function in ClassB
Hello, This is myStr in ClassB
可以看出:类的实例对象在调用其变量和方法时,确实是以声明成为的类为依据的。
匿名用户
2013-05-10
展开全部
可以用接口来做,C#不支持多重继承,但实现接口跟多重继承差不多
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
123动起来啊
2018-12-17
知道答主
回答量:65
采纳率:0%
帮助的人:17.4万
展开全部
C#一个类只允许有一个父类,但它可以同时实现若干个接口。如果把接口理解成特殊的类,这个类实际上就继承了多个父类。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-05-10
展开全部
我也碰到这样的问题
你知道提醒下啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式