2009-06-02 13 views
1

「タイプ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」ブツを使うのですが(男性... C#の3年後に私は何を読んでも理解できず、Wikipedia、ASP.NET 3.5プロフェッショナルブック、チュートリアルなどを読む...):(

つまり、それは、どうすればプロプを再利用できますか? rties。

私はExtensionMethodを作成することを考えましたが、それらをすべて記述してコードを再利用しなくてはなりません... Genericコントロールを作成し、それを継承する新しいコントロールを作成することを考えました

GlocalObject oPrintJob = null; 

...

WordPrintJob oPrintJob = (WordPrintJob)GlocalObject; 

私は何の意味を作るのですか?答えから


更新

[OK]を、ので、私は、インターフェイスは非常に私が継承できることを作成しようとしています何の「タイプT」が、ベースクラス/インタフェース... はありません私はPrintJobのタイプと言うインターフェースで、どのように私はWordPrintJobタイプを返すことができ

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

場合:それから、私は下のこの画像を取得しますか?私はそれ...

答えて

3

を得ることはありません:-(あなたは、基本クラスPrintJobを定義し、そのプロパティとしてPDFSettingを持っている必要があります。

その後のサブクラスであることをWordPrintJobExcelPrintJobなどを定義しますPrintJob

サブクラスからPDFSettingsにアクセスできるかどうか、または変数をベースにキャストする必要があるかどうかはわかりませんクラス初。

2

クリスは本質的に正しいOあなたの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クラスで定義されることになると、特定の印刷ジョブの各クラスは、基本クラスから継承します。

+0

+1。私は毎日それを使用しない場合、私が忘れてどのくらい驚いて停止することは決して! – ChrisF

+0

はインターフェイスを試しましたが、この権利を取得する方法がわかりません。これらのタイプを返すメソッドを作成するにはどうすればよいですか? – balexandre

+0

chills42によれば、このメソッドは常にPrintJobを返します。あなたがオブジェクト指向開発について簡単なリフレッシャーを必要とするかもしれないように思えます。継承と多型はあなたのためのキーワードです。 – Lazarus

1

Lazurus's answerに加えて、インターフェイスを作成し、ベースクラスではなく、ほとんどのコーディングを行うこともできます。

+0

はインターフェイスを試してくれたことが大変ありがとうございますが、私はこの権利を取得する方法を知りません。どのようにこれらのタイプを返すことができるメソッドを作成するのですか? – balexandre

+3

あなたはしません。基本型を返します。多形性が汚い仕事をするようにしましょう。 –

+0

Lazarusが言ったように...私は読書に戻る必要があります...助けのためのthxs!それは非常に感謝しています – balexandre

関連する問題