两个在C#中声明的相同变量

时间:2015-09-25 22:47:08

标签: c# out

我在网上找到了一个我在我的程序中使用的代码,但令我惊讶的是我发现有一个变量/函数被声明了两次......

现在,如果我要向DLL发送任何值,那么我将向哪个发送信息? 一个用完,而第二个没用...... 见代码:

[DllImport("msman.dll", CallingConvention=CallingConvention.StdCall, CharSet=CharSet.Ansi, ExactSpelling=false)]
        public static extern bool receive(int ID, double[] Bid, double[] Ask);

        public bool receive(int ID, out double first, out double second)
        {
            bool flag;
            double[] Array1st = new double[1];
            double[] Array2nd = new double[1];
            if (Form1.receive(ID, Array1st, Array2nd))
            {
                first = Array2nd[0];
                second = Array1st[0];
                flag = true;
            }
            else
            {
                second = 0;
                first = 0;
                flag = false;
            }
            return flag;
        }

而且,为什么可以声明两个变量..

3 个答案:

答案 0 :(得分:6)

我的C#不是很好,但这看起来像method overloading.

的标准情况

注意每种方法的签名

A: public static extern bool receive(int ID, double[] Bid, double[] Ask);
B: public bool receive(int ID, out double first, out double second)

A采用以下参数:int, double[], double[] 虽然B需要int, double, double。注意类型的差异。因此,当你调用它时,编译器会说“哦,你想用一个int和两个双数组来调用receive。得到它,你走吧!”并提供A

呼叫如何工作的示例:

int x = 1; double y = 1.0; double z = 2.0;
receive(x, y, z); // <-- this calls the second method (B).

int x = 1; double[] y = new double[1]; double[]z = new double[1];
y[0] = 1.0;
z[0] = 1.0;
receive(x, y, z); // <-- this calls the first method (A)

答案 1 :(得分:1)

方法可以重载,也就是说,只要参数不同,它们就可以具有相同的名称(仅允许在返回类型上重载)。

因此这是有效的:

void Foo(int x) { }
void Foo(char x) { }

或者,在您的情况下:

bool receive(int ID, double[] Bid, double[] Ask);
bool receive(int ID, out double first, out double second)

请注意,这是许多其他语言的标准语言功能,包括C ++。

答案 2 :(得分:1)

方法重载是面向对象的概念,其中方法可以具有相同的名称,只有参数(方法的签名)不同。

  using System;

  class Test
  {
    static void receive(int x, double y)
    {
      Console.WriteLine("receive(int x, double y)");
    }

    static void receive(double x, int y)
    {
      Console.WriteLine("receive(double x, int y)");
    }

    static void Main()
    {
      receive(5, 10.2);
    }
 }

请参阅此处https://msdn.microsoft.com/en-us/library/aa691131(v=vs.71).aspx