Отношения Реализации Интерфейса C# просто, “Может - Делать” Отношения?

В Reactjs прокси в основном используются, чтобы избежать проблем с корсами. Поскольку React Native подключается к iOS & amp; У Android изначально нет проблем с браузером, поэтому вам не нужен прокси.

Подход, который я использую, заключается в вызове http: 127.0.0.1: nnnn / api / route (не localhost) в приложении React Native при тестировании серверной части и развернутого URL-адреса в работе. Таким образом, вы можете развернуть свой сервер отдельно и подключиться к нему прямо в приложении.

9
задан Mitch Wheat 1 November 2008 в 08:40
поделиться

5 ответов

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

Иногда интерфейсы могут использоваться в качестве возможностей, и иногда они могут представить больше нормального, "-" отношения. Я не слишком зависнуть об этом - просто удостоверяются, что Вы понимаете то, что они могут сделать и что они не могут.

16
ответ дан 4 December 2019 в 07:36
поделиться

Я склонен думать об интерфейсах как о контракте поведения. Интерфейсы, такие как IComparable и IEnumerable являются классическими примерами.

В примере Вы дали, IHuman и IEngineer не являются действительно поведениями.

5
ответ дан 4 December 2019 в 07:36
поделиться

Найденный этим вопросом довольно поздно, но я хотел вмешаться.

Интерфейсы в C# имеют - отношения, но не-объект. Скорее-реализация.

Другими словами, для класса Foo, который реализует IBar, следующий тест:

Foo myFoo = new Foo(); 
return myFoo is IBar;

буквально возвращает true. Можно также сказать,

IBar bar = myArrayList[3] as IBar;
Foo foo = bar as Foo;

Или, если метод требует IBar, можно передать Нечто.

void DoSomething(IBar bar) {
}

static void Main() {
    Foo myFoo = new Foo();
    DoSomething(myFoo);
}

Очевидно, IBar не имеет никакой реализации сам по себе, таким образом, банка - делает отношения также применяются.

interface IBar { void happy(); }
class Foo : IBar
{
    void happy()
    {
        Console.Write("OH MAN I AM SO HAPPY!");
    }
}
class Program
{
    static void Main()
    {
        IBar myBar = new Foo();
        myBar.happy();
    }
}

Но в этом отношении то же верно для объектного наследования; объект класса, у Foo, который наследовал класс Панель, есть банка - делает отношения, а также - отношения, таким же образом как интерфейс делает. Это просто, что его реализация была предварительно создана для него.

Реальный вопрос, is-what, can-do-what? Наследованный объект класса is-a-[порождает экземпляр] и can-do-[поведение родителя], тогда как реализация интерфейса is-an-[соединяет интерфейсом с реализацией] и поэтому can-do-[интерфейсное поведение].

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

HTH, Jon

4
ответ дан 4 December 2019 в 07:36
поделиться

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

IComparable, ITestable, IEnumerable

и

Человек, Животное, Собака, и т.д.

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

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

2
ответ дан 4 December 2019 в 07:36
поделиться

Разработчики интерфейсов использования платформы.NET для обозначения "имеют" (или "может сделать"), отношения, тогда как "", реализован с помощью наследования.

Объяснение для этого может быть найдено в разделе Choosing Between Classes и Interfaces Руководства Разработчика инфраструктуры.NET:

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

Так, так как Ваши классы "Программиста" и "Инженера" в качестве примера, скорее всего, шли бы со своей собственной определенной функциональностью, они будут более соответственно implementated использованием наследования.

2
ответ дан 4 December 2019 в 07:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: