Sea*_*son 3 c# interface anonymous-types
我有以下内容:
List<IReport> myList = new List<IReport>();
Report myReport = TheirApi.GetReport();
Run Code Online (Sandbox Code Playgroud)
myReport符合IReport的所有资格,但无法实现IReport,因为我无法访问ItsApi的源代码.转换为IReport类型显然会导致null,我读到我无法将匿名类型转换为接口.
我有什么选择吗?
包装类正是医生所要求的:
ReportServices.GetAllCustomReports().ToList().ForEach(customReport => _customReports.Add(new ReportWrapper(customReport)));
public class ReportWrapper : IReport
{
private Report inner;
public int ID
{
get { return inner.ID; }
set { inner.ID = value; }
}
public string Name
{
get { return inner.Name; }
set { inner.Name = value; }
}
public ReportWrapper(Report obj)
{
inner = obj;
}
}
Run Code Online (Sandbox Code Playgroud)
您需要将此对象包装在另一个实现该接口的对象中,然后您需要实现它来调用内部对象的属性和方法.
例如:
public class ReportWrapper : IReport
{
MyObjectIsLikeReport inner;
public ReportWrapper(MyObjectIsLikeReport obj) {
this.inner = obj;
}
public void ReportMethod(int value) {
this.inner.ReportMethod(value);
}
public int SomeProperty {
get { return this.inner.SomeProperty; }
set { this.inner.SomeProperty = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
要使用它,您可以这样做:
List<IReport> myList = new List<IReport>();
MyObjectIsLikeReport myReport = TheirApi.GetReport();
myList.Add(new ReportWrapper(myReport));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
455 次 |
| 最近记录: |