2014-09-12 3 views
0

У меня есть интерфейс, IDetail и класс Detail, который реализует только IDetail. В классе Detail реализованное свойство ObjectId установлено в значение. Как в интерфейсе, так и в классе, свойство реализуется как простой get/set. Однако при доступе через интерфейс свойство возвращает null. Объект Detail фактически передается как общий аргумент, где T - IDetail. Это какая-то ошибка в .NET? Куда я начну пытаться понять это?Установленное свойство интерфейса, возвращающее значение null?

Это то, что показывает немедленное окно:

(detail as IDetail).ObjectId 
null 
(detail as Detail).ObjectId 
"..." 

Вот код:

public interface IDetail 
{ 
    string ObjectId { get; set; } 
} 

public class Detail : IDetail 
{ 
    public string ObjectId { get; set; } 
} 

public class SomeClass 
{ 
    public void SomeMethod() 
    { 
     SomeOtherClass.SomeOtherMethod(new Detail { ObjectId = "..." }); 
    } 
} 

public class SomeOtherClass<T> where T : IDetail 
{ 
    public static void SomeOtherMethod<T>(T detail) 
    { 
     DoSomething(detail.ObjectId); // ObjectId is null here??? 
    } 
} 

ответ

1

Я понял это, как я печатал на этот вопрос. Я чувствую себя таким глупым!

Оказывается, в спешке я фактически реализован мой интерфейс как класс:

public class IDetail 
{ 
    public string ObjectId { get; set; } 
} 

Что бы это сделать!

+4

Вам нужен резиновый ducky, http://en.wikipedia.org/wiki/Rubber_duck_debugging – asawyer

Смежные вопросы