我有一个方法Modify,它在里面做一个ClientModify操作。
public bool Modify()
{
bool retval = false;
retval = Spa.ClientModify(col);
}
这里我想要的是ClientModify应该只在事件处理程序“ServerEvents”中完成三个事件后执行,否则它应该返回(retval)false。如何对“Spa.ClientModify”进行检查
static private void ServerEvents(eventType type, event this_event, object passback)
{
if (this_event.type == eventType.SPD_spurtEvent)
{
if (this_event.objectName == "ready")
{
// some operation
}
else if (this_event.objectName == "info")
{
// some operation
}
else if (this_event.objectName == "serverstate")
{
// some operation
}
}
}
所以我做的是
public class Server : ModelObject, IServer
{
public class MyState
{
public bool Method1HasExecuted { get; set; }
public bool Method2HasExecuted { get; set; }
public bool Method3HasExecuted { get; set; }
}
}
static private void ServerEvents(eventType type, event this_event, object passback)
{
MyState s = new MyState();
each three operation i did check like this s.Method1HasExecuted = true; like this
}
and modify method i did this way
public bool Modify()
{
return MyClassState.Method1HasExecuted && MyClassState.Method2HasExecuted && MyClassState.Method3HasExecuted ? Spa.ClientModify() : false;
}
}
然后我收到错误Spo.Plugins.Server.MyState.Method1HasExecuted.get'必须声明一个正文,因为它没有标记为抽象或外部,是否还有其他方式
答案 0 :(得分:3)
public bool Method1HasExecuted { get; set; }
是Auto-implemented property,可从C#3.0开始提供。
您使用的是C#2.0吗?然后你必须写出那个属性:
private bool _method1HasExecuted;
public bool Method1HasExecuted
{
get { return _method1HasExecuted; }
set { _method1HasExecuted = value; }
}
答案 1 :(得分:2)
您正在使用.net 2.0,因此您无法使用自动实现的属性。您需要将MyState类更改为:
public class MyState
{
private bool _method1HasExecuted;
private bool _method2HasExecuted;
private bool _method3HasExecuted;
public bool Method1HasExecuted
{
get
{
return _method1HasExecuted;
}
set
{
_method1HasExecuted = value;
}
}
public bool Method2HasExecuted
{
get
{
return _method2HasExecuted;
}
set
{
_method2HasExecuted = value;
}
}
public bool Method3HasExecuted
{
get
{
return _method3HasExecuted;
}
set
{
_method3HasExecuted = value;
}
}
}
答案 2 :(得分:1)
public bool Method1HasExecuted { get; set; }
此属性的get / set方法未实现,因此这就是编译器抱怨的原因。实现属性的setter和getter以消除错误。
答案 3 :(得分:0)
通常情况下,当您将方法定义为除abstract
或extern
以外的任何其他方法但您没有正文时,会出现标题中引用的错误。可能类似下列之一:
public virtual void DoStuff();
public int GetANumber();
public string ReturnAString();
这些都不会编译。根据你提供的内容,我的猜测是你有一些方法(可能ClientModify
,因为我没有在你发布的代码中看到它的定义),这个方法是用名称和签名定义的,但没有正文。
如果不是这种情况,请指定编译器错误所引用的方法(如果没有在错误消息中指定,可以通过双击VS中的错误来获取此信息)并发布代码和引用它的代码示例。
答案 4 :(得分:0)
您尚未发布IServer界面,但是,错误很可能是因为您没有在类Server中的接口IServer上实现所有方法或属性
如果您使用的是.NET 3.5或更高版本,那么公共bool Method1HasExecuted {get;组;将是一个自动属性
我不确定我是否完全理解你的问题,但你需要挂钩3个不相关的方法调用,以便你可以在你的statemanagement类中标记相应的布尔值?
答案 5 :(得分:0)
你是如何编译的?代码public bool Method1HasExecuted { get; set; }
是有效的C#3(自动实现的属性)但不是有效的C#2(没有自动实现的属性)。对于C#2,它看起来像你写了一个抽象或外部属性,但没有标记它。检查您是否正在使用3.5 Framework进行编译。