C#:上演员名单<;界面>;列出<;类别>;-内部类的cast obejct
我有一个定义为C#:上演员名单<;界面>;列出<;类别>;-内部类的cast obejct,c#,oop,c#-4.0,C#,Oop,C# 4.0,我有一个定义为 public interface INamedReader { string DisplayInfoLine { get; } string DisplayName { get; } } 和一个实现该接口的类,但它是一个内部类 internal class NamedReader : INamedReader, INotifyPropertyChanged { public NamedReader(); public
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 = "");
}
现在我定义了一个类,它实现了INamedReader
public class ReaderDetails: INamedReader
{
public string DisplayInfoLine { get; }
public string DisplayName { get; }
}
然后我创建了一个返回列表的函数
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.
}
公共列表GetReaders
{
var readers=新列表();
var Ireaders=someobject.Getreaders();//返回NameReaderDevice(内部类)的列表。
//现在我想让Ireaders成为读者并返回。
}
有人能帮我一下吗,那太好了。你基本上是在试图将一个类转换成一个完全不同的类,就像在这张图片中,试图将
Class2
转换成Class3
:
在这种情况下,即使它们共享一个接口,也不能在一个接口和另一个接口之间进行转换
您有几个选择:
Getreaders()
方法中返回接口而不是显式实现的类,然后在应用程序中使用接口而不是显式实现的类李>
在第(3)种情况下,如果您需要或想要进一步解耦类实现,那么您可以对其使用依赖项注入(例如,通过nuget访问)。例如,在这种情况下,您可以在代码中创建所述接口的对象,而这些对象没有访问实现它的内部类的权限,您基本上是在尝试将一个类转换为一个完全不同的类,如图所示,尝试将
类2
转换为类3
:
在这种情况下,即使它们共享一个接口,也不能在一个接口和另一个接口之间进行转换
您有几个选择:
Getreaders()
方法中返回接口而不是显式实现的类,然后在应用程序中使用接口而不是显式实现的类李>
在第(3)种情况下,如果您需要或想要进一步解耦类实现,那么您可以对其使用依赖项注入(例如,通过nuget访问)。例如,在这种情况下,您可以在代码中创建所述接口的对象,而该代码没有对实现它的内部类的访问权,比如
var-Ireaders=someobject.Getreaders().Cast()代码>使用linq?Likevar-Ireaders=someobject.Getreaders().OfType()代码>?如果它是一个“名称恐惧设备”列表,你不能将它们转换为“ReaderDetails”,你不是已经问过了吗<代码>类型的.GetReaders()。可能与Likevar Ireaders=someobject.GetReaders().Cast()重复代码>使用linq?Likevar-Ireaders=someobject.Getreaders().OfType()代码>?如果它是一个“名称恐惧设备”列表,你不能将它们转换为“ReaderDetails”,你不是已经问过了吗<类型的代码>.GetReaders()。可能重复
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.
}