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

本文关键字:一个 创建 我可以 | 更新日期: 2023-09-27 18:08:25

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

是否有一种方法来委托整个类?

伪代码:

class myModelA
{
     void update()
     {
     }
}
class myModelB
{
     void update()
     {
     }
}

delegate class myModel;
if (x==1)
     myModel = myModelA;
else
     myModel = myModelB;

myModel.update();

我知道我可以委托"更新"方法,但在现实世界中,我有很多方法,我宁愿简单地委托类。

EDIT1 based on Jon Skeet's answer

但是如何声明一个公共变量呢?(非公共变量编译OK)

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

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

不,在这种情况下,你不需要委托-你需要一个接口

创建一个所有类都实现的接口:

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();

作为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.
        }
    }
相关文章: