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

时间:2009-06-02 11:51:23

标签: c# inheritance types

我有一些问题了解“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”但基类/接口...... 我正在尝试创建该接口,以便我可以继承它,我在下面得到这个图像:

alt text http://www.balexandre.com/temp/2009-06-02_1521_soQuestion_Interface.png

如果在界面中我说PrintJob类型,我该如何返回WordPrintJob类型? :-(我不明白......

3 个答案:

答案 0 :(得分:3)

您需要定义基类PrintJob并将PDFSetting作为其属性。

然后将WordPrintJobExcelPrintJob等定义为PrintJob的子类。

我已经做了很长时间了,所以我不记得你是否可以从子类访问PDFSettings或者你是否必须将变量转换为基类第一。

答案 1 :(得分:2)

Chris本质上是正确的,所以你的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类中定义,并且每个特定的打印作业类都将从该基类继承。

答案 2 :(得分:1)

Lazurus's answer一起,您可能还想创建一个接口,并对其进行大部分编码,而不是基类。