Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 泛型代理类_C#_Generics_Proxy - Fatal编程技术网

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接口。