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