繁体   English   中英

如何重用相同的变量,但用于不同的类型?

[英]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作为其属性。

然后将WordPrintJobExcelPrintJob等定义为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM