Visual Studio 15 SP 1
Нашел еще одну веселую штучку. (пишу руками - могут быть ошибки)
interface IFilename
{
String RootPath { get; set; }
String Basename { get; set; }
}
public abstract partial class TBase : IFilename
{
public void Generate()
{
String filename = TFileManager.BuildFilename(this);
....
}
....
String IFilename.RootPath { get; set; }
String IFilename.Basename { get; set; }
}
class MyTemplate : TBase, IFilename
{
public MyTemplate()
{
RootPath = @"c:\_Generated";
Basename = @"MyDoc.dat";
}
String RootPath { get; set; }
String Basename { get; set; }
}
public static class TFileManager
{
public static String BuildFilename(IFilename pFilename)
{
....
}
}
Как помнится, утверждалось, что при наличии двух определений интерфейсов в конечную реализацию входит последняя.
В данном случае последняя реализация находится в классе MyTemplate - там где происходит декларирование полей и присвоение значений.
Однако при кастинге в передаче параметра - в TFileManager.BuildFilename(this); - эта имплементация не используется, а получается первичная из TBase. А там, естественно, все нулл-нулл.
То, что поправить не сложно - понятно, но все же Я получил доступ к не последней реализации интерфейса...