我使用委托来表示方法 - 但我现在有很多具有相同方法的类(但这些方法中的代码不同)。
有没有办法委托整个班级?
伪代码:
class myModelA
{
void update()
{
}
}
class myModelB
{
void update()
{
}
}
delegate class myModel;
if (x==1)
myModel = myModelA;
else
myModel = myModelB;
myModel.update();
我知道我可以委托“üpdate”方法但在现实世界中我有很多方法,我宁愿只是简单地委派课程。
EDIT1 based on Jon Skeet's answer
但我如何申报公共变量? (非公共变量编译好)
public interface IModel
{
double myDouble; <<<< this gives an error
void Update();
}
public class MyModelA : IModel
{
public double myDouble;
public void Update() { ... }
}
public class MyModelB : IModel
{
public double myDouble;
public void Update() { ... }
}
答案 0 :(得分:8)
不,在这种情况下,您不需要委托 - 您需要interface。
您创建了一个所有类都实现的接口:
public interface IModel
{
void Update();
}
public class MyModelA : IModel
{
public void Update() { ... }
}
public class MyModelB : IModel
{
public void Update() { ... }
}
然后:
IModel model;
if (x == 1)
{
model = new MyModelA();
}
else
{
model = new MyModelB();
}
model.Update();
答案 1 :(得分:0)
作为Jon Skeet,我认为你需要使用接口。
的代码稍有改动http://www.dotnetperls.com/interface
using System;
interface IPerl
{
void Read();
}
class TestA : IPerl
{
public void Read()
{
Console.WriteLine("Read TestA");
}
}
class TestB : IPerl
{
public void Read()
{
Console.WriteLine("Read TestB");
}
}
class Program
{
static void Main()
{
IPerl perl = new TestA(); // Create instance.
perl.Read(); // Call method on interface.
}
}