Re[3]: Diamond inheritance
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.12.22 22:03
Оценка: +1
Здравствуйте, vsb, Вы писали:

vsb>java: types test.Test.I1 and test.Test.I2 are incompatible;

vsb> class test.Test.TestClass inherits unrelated defaults for method() from types test.Test.I1 and test.Test.I2

Это как раз не работает.

vsb>
vsb>  static class TestClass implements I1, I2 {
vsb>    @Override
vsb>    public void method() {
vsb>      I1.super.method();
vsb>    }
vsb>  }
vsb>


vsb>работает


А так и в Шарпе работает. Ты тупо объявил публичную функцию, которая переопределила дефолтную реализацию для обоих классов.
using System;

public class HelloWorld
{
    static void Main(string[] args)
    {
        var obj = new TestClass();
        obj.Method();
        I1 i1 = obj;
        i1.Method();
        I2 i2 = obj;
        i2.Method();
    }
}

interface I1
{
    void Method()
    {
        Console.WriteLine("I1");
    }
}

interface I2
{
    void Method()
    {
        Console.WriteLine("I2");
    }
}

class TestClass : I1, I2
{
    public void Method()
    {
        Console.WriteLine("TestClass");
    }
}


Ожидаемо выведет:
TestClass
TestClass
TestClass


Если в коде выше убрать публичный метод, то вызвать obj.Method(), а с кастом к интерфейсу прокатит.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.