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

标签 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”,只有基类/接口(interface)...... 然后我试图创建该接口(interface),以便我可以从它继承,我得到下面这张图片:

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

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

最佳答案

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

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

我已经很久没有这样做了,所以我不记得你是否能够从子类访问 PDFSettings 或者你是否必须强制转换变量首先传递给基类。

关于c# - 如何重用相同的变量,但用于不同的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/939102/

相关文章:

c# - 为什么将整数分配给双重附加属性会出错?

javascript - 展示与基于类的模型相关的 Javascript 继承优势

ruby - 如何找到 "essential"方法来提供 Ruby mixins 的接口(interface)?

java - 当notifyAll()调用时,恢复顺序是什么?

c# windows窗体在多线程时不响应

c# - .NET 3.5 没有 enum.tryparse,那么如何安全地将字符串解析为枚举?

c# - 匿名类型的 Asp.net WebForms 错误

python - 类型安全的 Python 3.2 字典

c# - CoreLocation 不适用于 MonoMac

c# - C#中的继承和容器