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

An object reference is required for the non-static field...etc

我查看了所有已针对该主题得到解答的类似问题,但找不到能解决我确切问题的答案。

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..等等。我在该行收到错误 "An object reference is required for the non-static field, method or property"。查看其他类似问题的答案,我尝试通过将 "private void Subscribe2Data()" 更改为 "private static void Subscrive2Data()."

来使我的方法静态化

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

然后我尝试创建一个完全独立的方法,其中包含 ReturnCode return 代码部分而不是 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);
        }

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

制作Subscribe2Data()并不能解决这个问题。

问题是在classDaServerMgt中,函数WriteAsync()不是静态函数。这意味着当你在 Subscribe2Data().

中调用这个函数时,你需要有一个 DaServerMgt 的实例

这个问题是 DaServerMgt.WriteAsync() 不是静态的,但您正试图按原样调用它。您需要实例化 DaServerMgt class,然后对该实例调用 WriteAsync() 方法。

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

您的第二次尝试不会成功,因为您无法实例化 (new) 一个方法,只能实例化一个构造函数。

在所有情况下,都没有必要让您的 class 静态化。