В связи с напором рекламы
начал потихоньку тыкать 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;
}
Возникает вопрос — это баги или фичи? Шарп такое вроде не позволяет, но с другой стороны, наверно с этим можно чего-нить полезное сделать