1

別のC#プロジェクトに複雑な戻り値を返す必要があるC#で記述されたexeファイル

これが私のコードです:

class Program
{
    private class MyObject
    {
        private int num;

        public int Num
        {
            get
            {
                return (this.num);
            }
            set
            {
                this.num = value;
            }
        }

        public MyObject(int num)
        {
            this.Num = num;
        }

    }

    [STAThread]
    public static MyObject Main(string[] args)
    {
        return new MyObject(5);
    }
}

これにより、次のエラーが発生します。... \ ConsoleApplication1.exe'には、エントリポイントに適した静的な'Main'メソッドが含まれていません。

試してみましたが、複雑な値を返すことに成功しませんでした。

4

2 に答える 2

7

Mainプロセスのエントリポイントとなることを目的としたメソッドからこれを行うことはできません。

他のコードから直接呼び出されるコードを作成している場合は、ほぼ確実に、代わりにクラスライブラリプロジェクトをビルドする必要があります。あるアプリケーションから別のアプリケーションに参照を追加することはできますが、それは珍しいことです(少なくとも単体テストの外部では)。これを実行する場合は、の代わりに別のメソッドを呼び出す必要がありますMain。(あるクラスでそのように宣言されたメソッドを持ち、別のクラスを「通常の」エントリポイントとして使用することもできますが、それは無意味に複雑に思えます。Main

于 2012-08-29T20:37:47.063 に答える
0

前述のように、exeをスタンドアロンの実行可能ファイルとして呼び出す場合は、実行Mainする必要があり、取得するのは従来のプロセスの入力/出力だけです。

ただし、本当に必要な場合は、exeをライブラリとして参照することもできます。

これがexeのコードである場合:

public class MyObject
{
    private int num;

    public int Num
    {
        get
        {
           return (this.num);
        }
        set
        {
           this.num = value;
        }
    }

    public MyObject(int num)
    {
        this.Num = num;
    }    
}

public class Program
{
    public static MyObject DoWork(int num)
    {
        return new MyObject(num);
    }

    [STAThread]
    public static int Main(string[] args)
    {
        DoWork(5);

        return 0;
    }
}

別のexeまたはdllから(最初のexeを参照していると仮定して)、次のようなコードを呼び出すことができます。

MyObject obj = Program.DoWork(8)

ただし、これは非常に珍しいアプローチです。複数の場所で必要な豊富なクラス/メソッドを定義するライブラリがある場合は、実際にそれらをdllに配置する必要があります。

于 2012-08-29T21:02:19.700 に答える