如何从C#中的Main()获取复杂的返回值

时间:2012-08-29 20:36:37

标签: c# return exe

用C#编写的exe文件 我需要将复杂的返回值返回给另一个C#项目

这是我的代码:

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”方法。

我尝试过玩它但是我没有成功让它返回一个复杂的值。

2 个答案:

答案 0 :(得分:7)

您无法通过Main方法执行此操作,该方法是该流程的切入点。

如果您正在编写要直接从其他代码调用的代码,那么您几乎肯定会构建一个类库项目。您可以从一个应用程序添加引用到另一个应用程序,但这是不寻常的(至少在单元测试之外)。如果您想这样做,您应该使用其他方法而不是Main。 (你可以在一个类中以这种方式声明Main方法,并使用不同的类作为“正常”入口点,但这看起来毫无意义。)

答案 1 :(得分: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中。