我在理解“T 型”幕后发生的事情时遇到了一些小问题,无法做到这一点,我希望你们中的一些人能在隧道尽头向我展示一盏灯 :)
我有一个 COM object我几乎分配了一些东西(属性),但我需要将它用于所有对象,我想这样做一次,并且只有它适用于所有类型。
打印机类型:
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# 我仍然无法理解,无论我阅读什么,我阅读维基百科,ASP.NET 3.5 专业书籍,教程, ...) :(
换句话说,我如何重用这些属性。
我考虑过创建一个 ExtensionMethod,但我将不得不编写所有这些方法并且不能重用任何代码... 我考虑创建一个通用控件并创建一个继承该基础控件的新控件,以便我可以使用
GlocalObject oPrintJob = null;
...
WordPrintJob oPrintJob = (WordPrintJob)GlocalObject;
我说的有道理吗?
根据答案更新
好的,所以,没有“类型 T”,只有基类/接口(interface)...... 然后我试图创建该接口(interface),以便我可以从它继承,我得到下面这张图片:
alt text http://www.balexandre.com/temp/2009-06-02_1521_soQuestion_Interface.png
如果我在界面中说 PrintJob 类型,我如何返回 WordPrintJob 类型? :-(我不明白...
最佳答案
您需要定义一个基类 PrintJob
并将 PDFSetting
作为其属性。
然后定义WordPrintJob
、ExcelPrintJob
等为PrintJob
的子类。
我已经很久没有这样做了,所以我不记得你是否能够从子类访问 PDFSettings
或者你是否必须强制转换变量首先传递给基类。
关于c# - 如何重用相同的变量,但用于不同的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/939102/