C# 泛型代理类
这句话的措辞可能不太正确,但无论如何还是要这样 如果我有以下陈述C# 泛型代理类,c#,generics,proxy,C#,Generics,Proxy,这句话的措辞可能不太正确,但无论如何还是要这样 如果我有以下陈述 DocumentMerger<EmailMerge> mailMerge = new DocumentMerger<EmailMerge>(); List<MailMessage> mailMessages = mailMerge.Process(); DocumentMerger<SmsMerge> mailMerge = new DocumentMerger<SmsMer
DocumentMerger<EmailMerge> mailMerge = new DocumentMerger<EmailMerge>();
List<MailMessage> mailMessages = mailMerge.Process();
DocumentMerger<SmsMerge> mailMerge = new DocumentMerger<SmsMerge>();
List<SmsMessage> smsMessages = mailMerge.Process();
documentmerge mailMerge=newdocumentmerge();
List mailMessages=mailMerge.Process();
DocumentMerge mailMerge=新DocumentMerge();
List smsMessages=mailMerge.Process();
如何创建一个泛型类,该类将某个类型作为其泛型,例如EmailMerge
,并返回MailMessage或SmsMessage对象的列表
我有一个名为DocumentMerge的类,它创建我的对象EmailMerge或SmsMerge
现在,我需要这两种方法来公开一个进程方法,该方法返回自己唯一的对象列表,例如list
或list
我怀疑代理可能是这里的目标,但无法计算出代码
如果您认为这个问题不够清楚,请重新命名。一个界面可以解决您的问题
public interface IDocumentMerger
{
}
public interface IOutputType
{
}
public class MailMessage : IOutputType
{
}
public class EmailMerge : IDocumentMerger
{
}
public class SmsMerge : IDocumentMerger
{
}
public class DocumentMerger<T> where T : IDocumentMerger
{
public List<IOutputType> Process()
{
IOutputType result = null;
if (typeof(T) == EmailMerge)
{
result = new MailMessage();
}
// etc..
// do stuff..
return result;
}
}
公共接口IDocumentMerge
{
}
公共接口IOutputType
{
}
公共类邮件消息:IOutputType
{
}
公共类EmailMerge:IDocumentMerge
{
}
公共类合并:IDocumentMerge
{
}
公共类DocumentMerge,其中T:IDocumentMerge
{
公开名单进程()
{
IOutputType结果=null;
if(typeof(T)=EmailMerge)
{
结果=新邮件();
}
//等等。。
//做事。。
返回结果;
}
}
你会这样使用它:
var documentMerger = new DocumentMerger<EmailMerge>();
var emailMerge = documentMerger.Process();
var documentmerge=new documentmerge();
var emailMerge=documentmerge.Process();
emailMerge的类型为List
我希望我正确地理解了你的问题。。代码未经测试,但应该是正确的。。或者非常接近:)
伊恩
编辑--看起来我误解了你的要求。。不过,这是一个简单的解决方案,请参见编辑。您可以扩展此解决方案,只需添加另一个Facotry类,即可使Factory模式就位。这可以避免调用类中出现一些切换情况和条件。Ref:我不太理解IOutputType是什么,因为我在result=newmailmessage()处得到一个转换错误;对不起,我是不是遗漏了什么?griegs-MailMessage应该实现IOutputType接口。