Подтвердить что ты не робот

Сколько классов вы наследуете на С#?

Сколько классов вы можете унаследовать из .NET?

Есть несколько backend С# файлов, которые я хотел бы разделить с отдельными статическими методами, но они все в разных классах. Есть ли способ унаследовать несколько классов?

Пример кода был бы очень оценен.

4b9b3361

Ответ 1

С# не поддерживает множественное наследование (это означает, что один класс наследуется от нескольких классов). Однако вы можете реализовать несколько интерфейсов в одном классе.

Что касается связывания унаследованных классов, то не существует предела. Просто имейте в виду сложность, которую вы представите своей системе. При использовании наследования убедитесь, что вы используете его в сценарии "есть". Чета - это животное. Мазда - это машина. В противном случае ваше наследование тесно связывает ваши классы с дизайном, который становится намного сложнее в обслуживании.

Если это статические методы "утилиты", просто вызовите их напрямую, не наследуя. Если эти методы не принадлежат к создаваемому объекту, вы не должны использовать наследование.

Ответ 2

Вы можете наследовать только один класс. Однако возможно реализовать несколько интерфейсов.

Ответ 3

Скажем, у вас есть 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");
    }
}

Поскольку метод журнала является статическим, вам не нужно инициализировать класс Utils для использования этого метода.

Как вывод, вы не можете использовать множественное наследование, но для вашего случая вам это тоже не нужно. Вы можете использовать статические методы без множественного наследования.

Ответ 4

Вы не можете выполнять множественное наследование в С#.

Вы могли бы достичь тех же целей, используя интерфейсы, если бы не тот факт, что вы хотите поделиться статическими методами.

Ответ 5

Вы можете наследовать "цепочку" столько классов, сколько хотите, но на языках .NET не допускается множественное наследование.

Единственная опция для множественного наследования в .NET - это интерфейсы.

Ответ 6

До тех пор, пока аксессоры установлены соответствующим образом, статические методы более или менее разделены в любом случае (фактически, они используют ключевое слово Shared в 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() и т.д.

Ответ 7

В .NET вы можете наследовать только один базовый класс, но реализовать несколько интерфейсов.

Для конкретной ситуации ASP.NET, такой как вы, вы можете сделать следующее:

public class BasePage : Page
{
    public string SomeMethod() { //Magic happens here }
}

и ваши веб-формы наследуются от BasePage в codebehind.

Еще один часто используемый курс заключается в создании настраиваемого статического класса, который имеет на нем все статические методы. Убедитесь, что вы работаете с конкретными объектами ASP.NET, чтобы префикс их с помощью HttpContext.Current.

Например:

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

Ответ 8

Вы не можете наследовать несколько классов. Однако вы можете сгруппировать классы, наследующие друг от друга.

Сотрудник класса

Менеджер классов: Сотрудник

class RegionalDirector: Manager

Итак, если в вашей программе есть целая схема идентификации/сотрудника ID/контактной информации, вы можете наследовать это от сотрудника. Затем уточняйте информацию для менеджера, а затем еще больше информации для регионального директора.