我可以为整个类c#创建一个委托吗?

时间:2013-04-10 16:52:17

标签: c# delegates

我使用委托来表示方法 - 但我现在有很多具有相同方法的类(但这些方法中的代码不同)。

有没有办法委托整个班级?

伪代码:

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() { ... }
}

2 个答案:

答案 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.
        }
    }