你可以在C#中继承多少个类?

时间:2010-08-30 13:42:49

标签: c# .net asp.net

您可以在.NET中继承多少个课程?

有几个后端C#文件我想分享不同的静态方法,但它们都在不同的类中。有没有办法继承多个类?

非常感谢示例代码。

8 个答案:

答案 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 /联系信息方案,您可以从员工继承该方案。然后,详细说明经理的信息,然后为区域主管提供更多信息。