答案 0 :(得分:33)
C#不支持多重继承(意味着单个类继承自多个类)。但是,您可以在单个类中实现多个接口。
就将继承的类链接在一起而言,本身没有限制。请记住您将为系统引入的复杂性。使用继承时,请确保在“是”方案中使用它。 cheeta是一种动物。马自达是一辆汽车。否则,你的继承会将你的类与一个更难维护的设计紧密结合在一起。
如果它们是静态“实用程序”方法,只需直接调用它们而不继承。除非这些方法属于您正在创建的实体,否则不应使用继承。
答案 1 :(得分:15)
您只能从单个类继承。但是,可以实现多个接口。
答案 2 :(得分:9)
假设你有Utils.cs:
internal class Utils {
public static void Log(string str) {
// log str to a file...
}
}
并且有一个DB.cs使用Log方法,并且在与Utils类相同的命名空间中:
public class DB {
public void SaveToDB() {
// some db operations
Utils.Log("DB operation successful");
}
}
由于Log方法是静态的,因此您无需初始化Utils类即可使用此方法。
作为结论,您不能使用多重继承,但对于您的情况,您不需要这样做。您可以使用没有多重继承的静态方法。
答案 3 :(得分:7)
您无法在C#中进行多重继承。
如果不是因为你想分享静态方法,你可以使用接口实现相同的目的。
答案 4 :(得分:3)
您可以在“chain”中继承所需的类,但.NET语言不允许多重继承。
.NET中多重继承的唯一选择是接口。
答案 5 :(得分:3)
只要适当地设置了访问器,静态方法或多或少都是共享的(实际上,它们使用VB中的共享关键字);它们与哪个类没有区别,因为它们与任何实例化对象断开连接。
要调用静态方法,请在其前面加上声明它的类的名称:
MyClass.MyUtilityMethod();
如果调用者和方法位于同一个项目/程序集中,访问者必须是public
或者可以是internal
。
如果您的目标仅仅是为静态方法创建单一访问点,则可以创建一个可以根据需要转发调用的类:
public static class SharedMethods
{
public static void SharedMethod1()
{
ClassA.SharedMethod1();
}
public static string GetName()
{
return NameProvider.GetName();
}
public static int GetCount()
{
return CountClass.GetCount();
}
}
这样您就可以通过SharedMethods.GetName()
等访问所有内容。
答案 6 :(得分:2)
在.NET中,您只能从一个基类继承,但实现多个接口。
对于像您一样的ASP.NET特定情况,您可以执行以下操作:
public class BasePage : Page
{
public string SomeMethod() { //Magic happens here }
}
让你的webforms继承自代码隐藏中的BasePage。
另一个经常遵循的课程是创建一个自定义静态类,其中包含所有静态方法。确保你使用ASP.NET特定的东西为它们添加HttpContext.Current。
例如:
public static class HelperClass
{
public static string GetUsernameFromSession()
{
return HttpContext.Current.Session["Username"].ToString();
}
}
答案 7 :(得分:2)
您不能从多个类继承。但是,您可以将彼此继承的类串联起来。
班级员工
班级经理:员工
类RegionalDirector:Manager
因此,如果您的程序中有一个完整的命名/员工ID /联系信息方案,您可以从员工继承该方案。然后,详细说明经理的信息,然后为区域主管提供更多信息。