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

在C#中可以继承多少类?,c#,.net,asp.net,C#,.net,Asp.net,您可以从中继承多少个类 有几个后端C#文件我想共享单独的静态方法,但它们都在不同的类中。有没有办法继承多个类 非常感谢示例代码。您只能从单个类继承。但是,可以实现多个接口。在C#中不能执行多重继承 如果不是因为您希望共享静态方法,您可以使用接口实现相同的目的。您可以在“链”中继承所需的任意多个类,但在.NET语言上不允许多重继承 NET中多重继承的唯一选项是接口。C#不支持多重继承(意味着单个类继承多个类)。但是,您可以在一个类中实现多个接口 至于将继承的类链接在一起,本身没有限制。请记住您将给

您可以从中继承多少个类

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


非常感谢示例代码。

您只能从单个类继承。但是,可以实现多个接口。

在C#中不能执行多重继承

如果不是因为您希望共享静态方法,您可以使用接口实现相同的目的。

您可以在“链”中继承所需的任意多个类,但在.NET语言上不允许多重继承

NET中多重继承的唯一选项是接口。

C#不支持多重继承(意味着单个类继承多个类)。但是,您可以在一个类中实现多个接口

至于将继承的类链接在一起,本身没有限制。请记住您将给系统带来的复杂性。使用继承时,请确保在“是a”场景中使用它。干酪是一种动物。马自达是一辆汽车。否则,继承会使类与一个更难维护的设计紧密结合


如果它们是静态的“实用工具”方法,只需直接调用它们而无需继承。除非这些方法属于您正在创建的实体,否则不应使用继承。

假设您有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类就可以使用此方法


总之,您不能使用多重继承,但对于您的情况,您也不需要使用多重继承。在.NET中,您只能从一个基类继承,但可以实现多个接口

对于ASP.NET特定的情况,如您所处的环境,您可以执行以下操作:

public class BasePage : Page
{
    public string SomeMethod() { //Magic happens here }
}
并让您的webforms从codebehind中的BasePage继承

另一个经常遵循的过程是创建一个定制的静态类,其中包含所有的静态方法。如果使用ASP.NET特定的内容,请确保使用HttpContext.Current作为前缀

例如:

public static class HelperClass
{
    public static string GetUsernameFromSession()
    {
        return HttpContext.Current.Session["Username"].ToString();
    }
}

只要访问器设置适当,静态方法或多或少都是共享的(事实上,它们使用VB中的关键字shared);它们在哪个类中没有区别,因为它们与任何实例化对象都是断开连接的

要调用静态方法,请在其前面加上声明该方法的类的名称:

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()
等访问所有内容。

您不能从多个类继承。但是,您可以将相互继承的类串在一起

班级员工

班级经理:员工

班级主任:经理


所以,如果您的程序中有一个完整的命名/员工ID/联系人信息方案,您可以从员工那里继承它。然后,向经理详细介绍信息,然后向区域总监提供更多信息。

@jordan我将在其中一个类中使用的大多数方法都是实用方法。如果是这种情况,您会如何建议我使用/不使用继承。在这种情况下,只需在使用继承的类中使用StaticClassName.StaticMethodName(…)。对于这个场景,您不需要继承。一个简单的电话就可以了。继承只应用于创建父类中更“专用”类型的新类,而不是授予对客户端类之外的方法的访问权限。您的代码是如何构造的?您是在尝试从单个类调用静态方法,还是尝试执行其他操作?如果您试图将一组静态方法组合在一起,接口对您没有帮助。因为这些方法是静态的(asuming public),您可以随时从任何类访问它们,不需要“继承”一个对象能够使用它的静态方法。@zach我认为这些方法中的大多数属于实用静态方法的范畴,将由几个不同的代码隐藏类使用。我使用常用方法的方式与我使用数学类的方式大致相同。(-1)“使用接口可以达到相同的目的。”错误。用户明确表示希望“共享单独的静态方法”。接口不能达到相同的目的。我不支持多重继承,我只是说你的陈述是错误的。虽然这是正确的,但我认为实际上并没有回答cfarm54提出的问题。问题是:有没有一种方法可以继承多个类?虽然我没有提供解决方案,但我确实正确地回答了这个问题。谢谢,这是我与@jordant一起寻找的答案。这种技巧叫做委派。正如杰伊正确地指出的那样,它在这里买不到多少东西。