Member 13098308 Ответов: 3

Почему интерфейс не может иметь статических методов в C#


Привет,

Может ли кто-нибудь помочь мне узнать, почему интерфейс в C# не может иметь статических методов?

Что я уже пробовал:

Я пробовал так, а потом получил ошибку времени компиляции, сказав: "модификатор static не является допустимым для этого элемента".
public interface InterfacesEx
{
    static string Test();
}
Может ли кто-нибудь помочь мне узнать, почему статика недопустима в интерфейсах?

3 Ответов

Рейтинг:
17

Vinod Jangle

Потому что интерфейс - это "контракт" или соглашение между потребителем (вызывающим абонентом) и поставщиком (вызываемым абонентом). Интерфейс описывает, что и как система будет обеспечивать функциональность. Нет необходимости в статических членах, предоставляемых третьей стороной. Статические члены не могут быть переопределены поставщиком, поэтому они не принадлежат интерфейсу.

Вопросы .NET (закрыты) - почему вы не можете иметь статические методы в интерфейсе?[^]


Maciej Los

5ед!

Рейтинг:
12

Richard Deeming

Другой взгляд на это:

Если интерфейс мог есть статический метод:

interface IFoo
{
    static void Bar();
}

class Foo1 : IFoo
{
    public static void Bar() { ... }
}

class Foo2 : IFoo
{
    public static void Bar() { ... }
}
и вы вызвали его:
IFoo.Bar();
не было бы никакой возможности для известный который реализация вы бы в конечном итоге позвонили. Что бы позвонить Foo1.Bar или Foo2.Bar?

Вы можете решить, что хотите, чтобы он позвонил оба реализации. Который вероятно работайте, пока не введете возвращаемые значения, или ref / out параметры:
interface IFoo
{
    static int Bar();
}

class Foo1 : IFoo
{
    public static int Bar() { return 42; }
}

class Foo2 : IFoo
{
    public static int Bar() { return 84; }
}

int x = IFoo.Bar(); // What is the value of x?

Интерфейс-это контракт на то, что вы можете сделать с помощью пример один класс. Статический интерфейс или статические члены интерфейса на самом деле не имеют никакого логического смысла.


Maciej Los

Очень хорошее объяснение, основанное на примерах!
5ед!

Рейтинг:
1

connectwithpandey

привет,

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


Maciej Los

Хорошее объяснение. +5