我正在尝试理解泛型类型.但是,我觉得我对假货感到困惑.
在我的系统上,我想加载一些东西.它是什么并不重要,它可以是任何东西.来电者会知道它是什么.
我的方法是使用界面,界面就是简单的界面
public interface ILoad
{
void Load<T>(T t);
}
Run Code Online (Sandbox Code Playgroud)
在我的Bll类中,我有一个方法
public void Start(ILoad load)
{
load.Load<Survey>(this); // I'm telling it the type and passing it the object
}
public class FakeLoadForSurvey : ILoad //this class knows about Survey
{
public void Load<T>(T t)
{
t = new Survey(); //fails
{
}
Run Code Online (Sandbox Code Playgroud)
它失败并显示以下错误消息
不能将类型调查转换为T
我希望上面的例子足够清楚.
如何告诉C#T类型Survey(或任何其他类型)?
Run Code Online (Sandbox Code Playgroud)public class FakeLoadForSurvey : ILoad //this class knows about Survey
如果实现接口的类知道类型T,则移动T到接口:
public interface ILoad<T>
{
void Load(T t);
}
public class FakeLoadForSurvey : ILoad<Survey>
{
public void Load(Survey t)
{
t = new Survey();
}
}
Run Code Online (Sandbox Code Playgroud)
但请注意,这不会影响传递给的参数Load().
因此,如果某些代码调用它:
var surveyLoader = new FakeLoadForSurvey();
Survey surveyToLoad = null;
surveyLoader.Load(surveyLoader);
Run Code Online (Sandbox Code Playgroud)
然后surveyToLoad还是回来null之后Load().如果您不想要,请将其传递给ref.
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |