编程语言
首页 > 编程语言> > C#中的私人代表

C#中的私人代表

作者:互联网

我正在使用包含私有方法的多个变体的类.目前,我正在使用枚举在这样的公开方法中选择合适的枚举.

public class MyClass
{
    public enum MyEnum { Type1, Type2, Type3, Type4 };

    private MyEnum _type;


    public MyClass(MyEnum type)
    {
        Type = type;
    }


    public MyEnum Type
    {
        get { return _type; }
        set { _type = value; }
    }


    public int Function(int x, int y)
    {
        switch(_type)
        {
            case MyEnum.Type1:
                return Function1(x,y);
            case MyEnum.Type2:
                return Function2(x,y);
            case MyEnum.Type3:
                return Function3(x, y);
            case MyEnum.Type4:
                return Function4(x, y);
        }
    }


    private int Function1(int x, int y)
    {
        // function variant 1
    }


    private int Function2(int x, int y)
    {
        // function variant 2
    }


    private int Function3(int x, int y)
    {
        // function variant 3
    }


    private int Function4(int x, int y)
    {
        // function variant 4
    }

}

这很好用,但是我想知道最好还是使用一个私有委托,只要枚举更改,该委托就会更新.特别是因为在这种情况下,将比枚举设置程序更频繁地调用public方法.

public class MyClass
{
    public enum MyEnum { Type1, Type2, Type3, Type4 };

    private Func<int, int, int> _function;
    private MyEnum _type;


    public MyClass(MyEnum type)
    {
        Type = type;
    }


    public MyEnum Type
    {
        get { return _type; }
        set
        {
            _type = value;
            OnTypeChange();
        }
    }


    private void OnTypeChange()
    {
        switch (_type)
        {
            case MyEnum.Type1:
                _function = Function1;
                return;
            case MyEnum.Type2:
                _function = Function2;
                return;
            case MyEnum.Type3:
                _function = Function3;
                return;
            case MyEnum.Type4:
                _function = Function4;
                return;
        }
    }


    public int Function(int x, int y)
    {
        return _function(x, y);
    }


    private int Function1(int x, int y)
    {
        // function variant 1
    }


    private int Function2(int x, int y)
    {
        // function variant 2
    }


    private int Function3(int x, int y)
    {
        // function variant 3
    }


    private int Function4(int x, int y)
    {
        // function variant 4
    }

}

我想我只是在寻找有关该主题的一些常规知识.这种事情通常在野外如何处理?

解决方法:

从技术上讲,第二个选项更好,因为您不必在每次调用public方法时都进行切换.

首先是更具可读性.

但是,在所有现实中,在枚举上切换行为都是一个不错的危险信号.通常,您将继承MyClass并使用多态来获得所需的行为.我绝对会考虑您的情况. “在野外”,这可能就是我会使用的方法.

标签:delegates,c
来源: https://codeday.me/bug/20191120/2040720.html