![](/img/trans.png)
[英]Consuming an API which has a two types which are the same but have different names. How can I reuse my code?
[英]How to reuse the same variable, but for different types?
我有一个小问题,无法理解“ T型”幕后的情况是如何做到这一点的,我希望你们中的一些人可以向我展示隧道尽头的光:)
我有一个COM对象 ,几乎分配了一些东西(属性),但是我需要对所有对象都使用它,我只想这样做一次,并且只有在所有类型上都可以使用。
打印机类型:
switch (type)
{
case convert2pdf.ConvertFileType.Word:
WordPrintJob oPrintJob = null; break;
case convert2pdf.ConvertFileType.Excel:
ExcelPrintJob oPrintJob = null; break;
case convert2pdf.ConvertFileType.PowerPoint:
PowerPointPrintJob oPrintJob = null; break;
case convert2pdf.ConvertFileType.IE:
IEPrintJob oPrintJob = null; break;
case convert2pdf.ConvertFileType.Publisher:
PublisherPrintJob oPrintJob = null; break;
case convert2pdf.ConvertFileType.Visio:
VisioPrintJob oPrintJob = null; break;
default:
GenericPrintJob oPrintJob = null; break;
}
然后,无论我创建的对象类型是什么,每次都执行以下操作:
PDFSetting oPDFSetting = null;
oPrintJob = oPrinter.GenericPrintJob;
oPDFSetting = oPrintJob.PDFSetting;
/*put water mark on the first page, set the water mark text to "BCL EasyPDF */
oPDFSetting.set_Watermark(0, true);
oPDFSetting.set_WatermarkColor(0, (uint)System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Blue));
oPDFSetting.set_WatermarkFirstPageOnly(0, true);
oPDFSetting.set_WatermarkText(0, "EasyPDF");
/*set the meta data for the pdf file*/
oPDFSetting.MetaData = true;
oPDFSetting.MetaDataAuthor = "Your Name";
oPDFSetting.MetaDataCreator = "BCL";
oPDFSetting.MetaDataKeywords = "PDF";
oPDFSetting.MetaDataSubject = "Converter";
oPDFSetting.MetaDataTitle = "easyPDF SDK";
我如何使用“ T型”的东西(伙计们。。。经过3年的C#学习,无论我读什么,我仍然不明白,而且我阅读了Wikipedia,ASP.NET 3.5 Professional书,教程,... ):(
换句话说,我该如何重用属性。
我考虑过创建一个ExtensionMethod,但是我将不得不编写所有这些方法,而不要重用任何代码...我考虑过创建一个通用控件,并创建一个继承该基本控件的新控件,以便我可以使用
GlocalObject oPrintJob = null;
...
WordPrintJob oPrintJob = (WordPrintJob)GlocalObject;
我有什么意义吗?
从答案更新
好的,因此,除了基类/接口之外,没有“类型T”……我然后尝试创建该接口,以便可以继承它,并在下面得到此图像:
替代文字http://www.balexandre.com/temp/2009-06-02_1521_soQuestion_Interface.png
如果在界面中输入PrintJob类型,如何返回WordPrintJob类型? :-(我不明白...
您需要定义一个基类PrintJob
并将PDFSetting
作为其属性。
然后将WordPrintJob
, ExcelPrintJob
等定义为PrintJob
子类。
自完成此操作以来已经有很长时间了,所以我不记得您是否能够从子类访问PDFSettings
,或者是否必须先将变量转换为基类。
克里斯本质上是正确的,因此您的switch语句应如下所示:
PrintJob oPrintJob = null;
switch (type)
{
case convert2pdf.ConvertFileType.Word:
oPrintJob = new WordPrintJob();
break;
case convert2pdf.ConvertFileType.Excel:
oPrintJob = new ExcelPrintJob();
break;
case convert2pdf.ConvertFileType.PowerPoint:
oPrintJob = new PowerPointPrintJob();
break;
case convert2pdf.ConvertFileType.IE:
oPrintJob = new IEPrintJob();
break;
case convert2pdf.ConvertFileType.Publisher:
oPrintJob = new PublisherPrintJob();
break;
case convert2pdf.ConvertFileType.Visio:
oPrintJob = new VisioPrintJob();
break;
default:
oPrintJob = new GenericPrintJob();
break;
}
PDFSettings属性将在您的基本PrintJob类中定义,并且每个特定的打印作业类都将从该基类继承。
与Lazurus的答案一起 ,您可能还想创建一个Interface,并针对它进行大部分编码,而不是基类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.