非静态字段需要对象引用...等
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 静态化。
我查看了所有已针对该主题得到解答的类似问题,但找不到能解决我确切问题的答案。
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 静态化。