Другой вопрос по D
От: LIS  
Дата: 10.06.05 13:48
Оценка:
В связи с напором рекламы начал потихоньку тыкать D, и натЫкнулся на интересный момент:

1. Объявляем в интерфейсе метод с уровнем доступа public, а в классе реализуем его с уровнем доступа protected — D молча компилит, но если попробуем public -> private или protected -> private — компилятор ругается, что интерфейс не определен.

module test;

interface ITest
{
    public char[] ToString();
}

class Test: ITest
{    
    public: this() {}
    
    protected char[] ToString()
    {
        return "class Test\n";
    }
}

int main(char[][] args)
{
    Test t = new Test();
    
    ITest i = cast(ITest)(t);
    printf(i.ToString());
    
    return 0;
}


2. Объявляем в интерфейсе метод с уровнем доступа private ( ), в классе его вообще не реализуем — компилиться на ура.

module test;

interface ITest
{
    private char[] ToString();
    public char[] XToString();
}

class Test: ITest
{    
    public: this() {}
    
    public char[] XToString()
    {
        return "class Test\n";
    }
}

int main(char[][] args)
{
    Test t = new Test();
    
    ITest i = cast(ITest)(t);
    printf(i.XToString());
    
    return 0;
}


Возникает вопрос — это баги или фичи? Шарп такое вроде не позволяет, но с другой стороны, наверно с этим можно чего-нить полезное сделать
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.