所以,我有一个问题,我无法完全解决这个问题。
所以,我有一个名为Property
的基类,我有很多类派生自那个类,如IntProperty
,ColorProperty
等等。现在,我也有一些属于枚举类型,目前它们都是单独的类。我想把它变成一个普通类,但问题就在这里:
在代码的不同部分,我需要处理所有这些代码。请记住,我不能使用虚拟功能(我正在使用UnityEditor进行操作)。
目前,我有一个函数,它以Property
为参数,然后对从属性派生的所有类型执行此操作:
if(property is IntProperty)
{
IntProperty intProperty = property as IntProperty;
intProperty.theValue = specific_int_function();
}
specific_int_function
对于我所拥有的T
所有enum值都是相同的。
理想情况下,我想做这样的事情(伪代码):
(using T)
{
if(property is EnumProperty<T>)
{
EnumProperty<T> enumProperty = property as EnumProperty<T>;
enumProperty.value = (T)my_enum_value_function(typeof(T));
}
}
有关如何使所有这些代码更好的想法吗?
希望我提供了所有相关信息。
编辑:
并不是说我不能在这些类中使用虚函数,但我不能调用该特定文件中的任何特定函数。我有2个编译组,只有一个可以访问这些函数(EditorGUI函数适用于那些知道我在说什么的人)
此致 洛林
答案 0 :(得分:1)
请记住,我不能使用虚拟功能(我正在使用UnityEditor进行操作)。
这真的是你应该做的。如果你不能,那就没问题了,但为了其他人的利益,我在这里留下这个笔记也会读到这个问题并回答。
根据我的经验,实现这一目标的最困难的方法是使用辅助类,因为它可以避免在使用通用辅助方法时必须处理的一些反射复杂性。
abstract class EnumPropertyHelper {
public abstract void DoSomething(Property property);
}
class EnumPropertyHelper<T> : EnumPropertyHelper {
public override void DoSomething(Property property) {
EnumProperty<T> enumProperty = property as EnumProperty<T>;
enumProperty.value = (T)my_enum_value_function(typeof(T));
}
}
然后,
if (property.GetType().IsGenericType
&& property.GetType().GetGenericTypeDefinition() == typeof(EnumProperty<>)) {
var helperType = typeof(EnumPropertyHelper<>).MakeGenericType(property.GetType().GetGenericTypeArguments());
var helper = (EnumPropertyHelper)Activator.CreateInstance(helper);
helper.DoSomething(property);
}
但是你确实需要跳过类似于这个的箍,无论你最终做什么,因为C#和.NET不允许你在非泛型方法中使用通用代码。
答案 1 :(得分:0)
您可以使用向该类添加一个函数指针,并且每个构造函数都可以实现它自己的函数吗?
添加属性Func<void> functionPTR = null
在每个课程中,您都有
等功能void specific_int_function() {
//Do Something
}
在类构造函数中
functionPTR = specific_int_function;
然后在泛型类
中void GenericHandler() {
functionPTR();
}
我不确定语法,但这应该会为您提供您想要的表现。
阅读函数指针,了解如何定义返回值和函数参数。