非静态字段等需要对象引用

时间:2016-07-05 20:37:39

标签: c# non-static

我已经查看了有关此主题的所有类似问题,但我找不到能够解决我确切问题的答案。

private void Subscribe2Data()
    {
        // Define parameters for Subscribe method:
        //int itemIndex;

        //initialize the client subscription handle
        clientSubscriptionHandle = 1;

        //Paramter to specify if the subscription will be added as active or not
        bool active = true;

        // The updateRate parameter is used to tell the server how fast we
        // would like to see data updates.
        int updateRate = 1000;

        // The deadband parameter specifies the minimum deviation needed
        // to be considered a change of value. 0 is disabled
        Single deadBand = 0;

        // The revisedUpdateRate parameter is the actual update rate that the
        // server will be using.
        int revisedUpdateRate;


        //Initialize the item identifier values
        itemIdentifiers[0] = new ItemIdentifier();
        itemIdentifiers[0].ClientHandle = 0;
        itemIdentifiers[0].DataType = Type.GetType("System.int16");
        itemIdentifiers[0].ItemName = "Channel1.Device1.Data1";


        itemIdentifiers[1] = new ItemIdentifier();
        itemIdentifiers[1].ClientHandle = 1;
        itemIdentifiers[1].DataType = Type.GetType("System.int16");
        itemIdentifiers[1].ItemName = "Channel1.Device1.Data2";


        itemValues[0] = new ItemValue();
        itemValues[0].Value = temp;

        ReturnCode returnCode;
        try
        {
            returnCode = DaServerMgt.WriteAsync(clientSubscriptionHandle, ref itemIdentifiers, itemValues);
            if (returnCode != ReturnCode.SUCCEEDED)
            {
                Console.WriteLine("Write request failed");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("WriteAsync exception. Reason: ", ex);
        }

靠近底部,表示returnCode = DaServerMgt.WriteAsync..etc。我收到错误"非静态字段,方法或属性需要对象引用"在那条线上。看看其他类似问题的答案,我尝试通过更改" private void Subscribe2Data()"来使我的方法保持静态。 to" private static void Subscrive2Data()。"

这样做使得该方法中的每个变量都具有对象引用错误,而不仅仅是DaServerMgt.WriteAsync行。

然后我尝试使用其中的ReturnCode返回代码部分而不是Subscribe2Data方法创建一个完全独立的方法,并使新方法保持静态,但错误仍然存​​在。

我也试过

 ReturnCode returnCode;
        try
        {
            Service1 p = new Service1();
            returnCode = p.DaServerMgt.WriteAsync(clientSubscriptionHandle, ref itemIdentifiers, itemValues);
            if (returnCode != ReturnCode.SUCCEEDED)
            {
                Console.WriteLine("Write request failed");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("WriteAsync exception. Reason: ", ex);
        }

编辑:这确实修复了"对象引用。"错误,但现在我正在使用类(我的坏),它给出了其他错误,说Service1不包含对DaServerMgt..etc的定义。 有谁知道我做错了什么?

2 个答案:

答案 0 :(得分:0)

制作Subscribe2Data()无法解决此问题。

问题是在类DaServerMgt中,函数WriteAsync()不是静态函数。这意味着当您在DaServerMgt中调用此函数时,您需要拥有Subscribe2Data()的实例。

答案 1 :(得分:0)

这个问题是DaServerMgt.WriteAsync()不是静态的,但你试图像它一样调用它。您需要实例化DaServerMgt类,然后在该实例上调用WriteAsync()方法。

DaServerMgt server = new DaServerMgt();
returnCode = server.WriteAsync(clientSubscriptionHandle, ref itemIdentifiers, itemValues);

您的第二次尝试无效,因为您无法实例化(new)方法,只能构造一个。

在所有情况下,都不需要使您的课程保持静态。