我有一个定义为
的界面public interface INamedReader
{
string DisplayInfoLine { get; }
string DisplayName { get; }
}
和一个实现该接口的类,但它是一个内部类
internal class NamedReader : INamedReader, INotifyPropertyChanged
{
public NamedReader();
public string DisplayInfoLine { get; set; }
public string DisplayName { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
public override string ToString();
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = "");
protected virtual bool Set<TField>(ref TField field, TField value, [CallerMemberName] string propertyName = "");
}
和一个实现上述NamedReader类的类
internal class NamedReaderDevice : NamedReader
{
public NamedReaderDevice();
public string Id { get; set; }
}
现在我定义了实现INamedReader
的类public class ReaderDetails: INamedReader
{
public string DisplayInfoLine { get; }
public string DisplayName { get; }
}
然后我创建了一个返回List的函数。
public List<ReaderDetails> GetReaders
{
var readers = new List<ReaderDetails>();
var Ireaders = someobject.Getreaders();// Returns the list of NameReaderDevice (which is an internal class).
// Now i would like cast Ireaders as readers and return.
}
有人可以帮我解决这个问题,那会很棒。
答案 0 :(得分:0)
您基本上是在尝试将一个类转换为完全不同的类,如图所示,尝试转换 Class2
到Class3
:
在这种情况下,即使他们共享一个界面,也不能在一个界面之间强制。
您有几个选择:
Getreaders()
方法中返回一个接口而不是显式实现的类,然后在应用程序中使用接口而不是显式实现的类; 如果(3)如果你需要或想要进一步解耦你的类实现,那么你可以使用依赖注入(例如。SimpleInjector,可以通过nuget访问)。在那种情况下,您可以在代码中创建所述接口的对象,该代码无法访问实现它的内部类,