我是仿制药的新手,需要一些帮助。
我想为所有“变换器”类创建一个接口来实现。要成为“变换器”,该类必须包含至少一个T mapTo<T>(T t)
的变体。
以下是我想如何使用变形金刚:
重载一些方法......太棒了!看起来很简单!
public class Transformer : ITransformer
{
public Transformer(IPerson instance)
{
}
public XmlDocument mapTo(XmlDocument xmlDocument)
{
// Transformation code would go here...
// For Example:
// element.InnerXml = instance.Name;
return xmlDocument;
}
public UIPerson maptTo(UIPerson person)
{
// Transformation code would go here...
// For Example:
// person.Name = instance.Name;
return person;
}
}
让我们使用GENERICS来定义界面:
提出想法!
public interface ITransformer
{
T MapTo<T>(T t);
}
问题:
如果我在接口中使用泛型,我的具体类是LITERALLY强制执行以下内容:
public T MapTo<T>(T t)
{
throw new NotImplementedException();
}
这使得课堂上看起来很糟糕
public class Transformer : ITransformer
{
public Transformer(IPerson instance)
{
}
public XmlDocument MapTo(XmlDocument xmlDocument)
{
// Transformation code would go here...
// For Example:
// element.InnerXml = instance.Name;
return xmlDocument;
}
public UIPerson MapTo(UIPerson person)
{
// Transformation code would go here...
// For Example:
// person.Name = instance.Name;
return person;
}
public T MapTo<T>(T t)
{
throw new NotImplementedException();
}
}
答案 0 :(得分:2)
可能将通用参数添加到接口定义:
public interface ITransformer<T>
{
T MapTo(T t);
}
并实现您需要的所有映射:
public class Transformer : ITransformer<XmlDocument>, ITransformer<UIPerson>
答案 1 :(得分:1)
试试这个:
public interface ITransformer<T>
{
T MapTo(T t);
}
然后,当您实现界面时,您的类看起来像:
public class Transformer : ITransformer<XmlDocument>
{
public XmlDocument MapTo(XmlDocument t)
{
throw new NotImplementedException();
}
}
答案 2 :(得分:1)
您需要使ITransformer
接口通用。所以,你想要这个:
public interface ITransformer<T>
{
public T MapTo(T t);
}
然后,在实现接口时,类可以向接口传递他们希望使用的类的类型参数:
public class Transformer : ITransformer<XmlDocument>
{
public XmlDocument MapTo(XmlDocument t)
{
//...
}
}
编辑:正如lazyberezovsky所说,没有什么可以阻止你多次实现相同的界面:
public class Transformer : ITransformer<XmlDocument>, ITransformer<UIPerson>
当然,必须为XmlDocument MapTo(XmlDocument t)
和UIPerson MapTo(UIPerson t)
提供实施。
答案 3 :(得分:0)
我认为你要做的是拥有以下界面:
public interface ITransformer<TEntity> {
public TEntity MapTo(TEntity entity);
}