抱歉,我需要解释我的初步目标。 我需要动态调用不同类中的不同void。
public class WorkListEntity
{
public string Formid { get; set; }
public void AfterAuditVoid() {}
}
无法隐式转换类型' void'到'无效'
一个实体:
public class WorkListDal
{
public void WorkListVoid()
{
//omit
}
}
一类:
public class InitWorkListDal
{
public class DoWork(WorkListEntity wf)
{
//omit
//after all call the void.
wf.AfterAuditVoid();
}
}
一个公共课:
class PointClass {
var x: Int = 0
var y: Int = 0
var z: Bool = false
init(x: Int, y: Int) {
self.x = x
self.y = y
}
func getBol() -> Bool {
return true
}
func toString() -> String {
if (z = getBol()) == true {//like objc
}
return "x=\(x), y=\(y)"
}
}
答案 0 :(得分:0)
事实上你的方法没有返回任何东西,所以你不能在赋值中使用它们的返回类型,即使它们会返回一些东西,这也是错误的,因为这两个值都是rvalues所以你不能彼此分配,这两个都将以这种方式未被引用,并且有资格获得garbadge,如果你没有,则持有其他引用。这只是思考的一种错误方式。
我建议您一个接一个地简单地调用您的方法:
public class CommandHandler : ICommand
{
public event EventHandler CanExecuteChanged;
private Action _action;
public CommandHandler(Action action)
{
this._action = action;
}
public bool CanExecute(object parameter)
{
return true;
}
public void Execute(object parameter)
{
this._action();
}
}
就像在当前时刻一样,分配,甚至方法都会返回,也不会发生。
答案 1 :(得分:0)
model.AfterAuditVoid() = ad.WorkListVoid();
这条线太错了。首先,您无法为方法指定值。
例如,这些都将无法构建:
object.Equals() = 0;
String.Join("") = 0;
Int32.Parse("") = 0;
在类级别,只能为可写字段和可设置属性分配值/引用:
public String MyProperty { get; set; }
...
obj.MyProperty = "MyValue";
我建议您阅读MSDN documentation regarding assignment operator和documentation reagarding C# statements。
现在,除了尝试为方法分配值之外,还有第二个谬误 - 您尝试分配void返回类型。你不能。没有回报。这就是无效的意思。就像在,即使你试图设置一个属性,这仍然不会起作用:
obj.MyProperty = ad.WorkListVoid();
Void根本没有结果。它执行一个没有返回的函数,因此无法分配void返回类型。它与NULL
的概念不同,因此不要将void
与NULL
混淆。
编辑:
您可能正在尝试完全不同的其他事情 - 您可能会试图说"如果我致电AfterAuditVoid
,那实际上应该调用WorkListVoid
"。我们可以这样做:
public class WorkListEntity
{
public string Formid { get; set; }
//change to an action (e.g. in lambda terms, this would be () => {} - no parameters and no outputs
public Action AfterAuditVoid { get; set; }
}
然后,你可以这样做:
var model = new WorkListEntity()
model.Formid="1";
model.AfterAuditVoid = ad.WorkListVoid;
这样您就可以拨打model.AfterAuditVoid()
,这实际上会调用ad.WorkListVoid()
。我建议阅读this to get more familiar with funcs and actions。
答案 2 :(得分:0)
根据您的问题,我收集您要将void函数行为分配给您的类函数。
你的方法是错误的......也许使用delegates是正确的方法。如果你做了这样的修改......你可以让你的代码动态引用不同的函数......甚至是void类型的函数。