0

攻撃方法がわからないという問題があります。うまくいけば、誰かが私を正しい方向に蹴ることができます. =)

Word、Excel、Microstation など、いくつかのクラスを作成しました。これらのクラスには、同じことを行う同じ名前の同じ関数があります (もちろんコードは異なります)。

プログラム (Excel アドイン) への入力は、Word、Excel、または Microstation のいずれかのファイルです。ファイルの種類に応じて、正しいクラス (Word、Excel、または Microstation) のインスタンスを作成します。

インスタンスを作成したら、インスタンス化されたクラス関数を呼び出す関数を呼び出したいと思います。

私はこれをしたい:

public function RunTheFunctions(??? o)
{
   o.OpenFile();
   o.DoStuff();
   o.SaveFile();
}

それ以外の:

oWord.OpenFile();
oWord.DoStuff();
oWord.SaveFile();
oExcel.OpenFile();
oExcel.DoStuff();
oExcel.SaveFile();
oMicrostation.OpenFile();
oMicrostation.DoStuff();
oMicrostation.SaveFile();

私が試してみました:

object o;
Word oWord = new Word();
o = oWord;
o.OpenFile();

しかし、うまくいきません。

私の質問が比較的明確であることを願っています。=)

よろしく、 S

4

5 に答える 5

4

必要なメソッドでインターフェイスを作成し、具体的なクラスに実装します。

public interface IDocument
{
    void OpenFile();
    void DoStuff();
    void SaveFile();
}

public class Word : IDocument { .... }

public function RunTheFunctions(IDocument o)
{
    o.OpenFile();
    o.DoStuff();
    o.SaveFile();
}
于 2013-04-20T13:36:11.300 に答える
2

それを行う正しい方法であるインターフェイス ソリューションに加えて、dynamic.NET Framework >= 4.0 の場合はパラメーターの型として使用することもできます。このソリューションは、Word、Excel、および Microstation がサード パーティのクラスであり、共通のインターフェイスまたは基本クラスを共有していない場合に有効です。(実際には、この場合アダプター パターンを使用して、インターフェイス ソリューションに戻ることができます)

public void RunTheFunctions(dynamic o)
{
    o.OpenFile();
    o.DoStuff();
    o.SaveFile();
}

指定されたオブジェクトに対応するメソッドがない場合、実行時に例外がスローされます。

于 2013-04-20T13:44:28.537 に答える
1

Word、Excel、Microstation クラスによって実装されるインターフェイスを作成できます。

// interface for your document classes
interface IDocument
{
    void OpenFile();
    void DoStuff();
    void SaveFile();
}

// Word implements IDocument
class Word : IDocument
{
    public void OpenFile() { /* ... */ }
    public void DoStuff() { /* ... */ }
    public void SaveFile() { /* ... */ }
}

// later
public function RunTheFunctions(IDocument o)
{
    o.OpenFile();
    o.DoStuff();
    o.SaveFile();
}

// usage
IDocument doc = new Word();
RunTheFunctions(doc);
于 2013-04-20T13:36:30.667 に答える
0

インターフェイスを作成します。

public interface ICommonMethods
{
void OpenFile();
void DoStuff();
void SaveFile();
}

クラスにそれを実装させてから、次のようにします。

ICommonMethods o = new Word();

o.OpenFile();
于 2013-04-20T13:36:40.993 に答える