Подключение интерфейса Java / C # - PullRequest
0 голосов
/ 28 января 2011

Возможно ли в Java или C # подключить метод интерфейса к определенному методу общего назначения?

Другими словами, я могу сделать следующее без методов-заглушек, которые вызывают фактический метод:

public interface IInterface1
{
    object DoSomething(object withThis);
}

public interface IInterface2
{
    object DoSomethingElse(object withThis);
}

public class SomeClass : IInterface1, IInterface2
{
    object DoesNothing(object withThis)
    {
        return withThis;
    }

    object IInterface1.DoSomething(object withThis) // stub method
    {
        return DoesNothing(object withThis);
    }

    object IInterface2.DoSomethingElse(object withThis) // stub method
    {
        return DoesNothing(object withThis);
    }
}

Я надеюсь, что компилятор будет достаточно умен, чтобы понять, что все, что ему нужно сделать, это связать IInterface1 и IInterface2 с методом DoSomethingElse и не прыгать через методы-заглушки ...?

CheersДж

Ответы [ 3 ]

0 голосов
/ 28 января 2011

Нет, это не то, что вы можете сделать без добавления методов-заглушек.Что если у вас в классе есть метод DoesNothing2 с той же сигнатурой, что и DoesNothing?Как бы компилятор узнал, какой использовать?Это кажется очень специализированным.

0 голосов
/ 28 января 2011

Компилятор не удаляет их во время компиляции (это может затруднить чтение трассировок стека). Однако современные среды выполнения для обоих языков имеют компиляторы Just In Time, которые выполняют встраивание.JIT может и будет исключать многие вырожденные вызовы методов и перемещать реальный код, чтобы избежать выделения регистров для ссылок на аргументы метода и других издержек, связанных с выделением пространства метода.

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

0 голосов
/ 28 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...