gpt4 book ai didi

c# - 将类似的方法移动到通用实现中

转载 作者:太空宇宙 更新时间:2023-11-03 20:50:54 25 4
gpt4 key购买 nike

我正在尝试重构一些代码,但不得不承认我对泛型的概念还很陌生。

我有一个基类:

BaseVarDef.cs:

using UnityEngine;
public abstract class BaseVarDef<T> : ScriptableObject
{
[Multiline]
public string DeveloperDescription = "";

public T Value;

public void SetValue(T value)
{
Value = value;
}

}

然后我有几个派生自它的类。但是它们都包含相同的 3 个方法,我想将它们重构到这个通用基类中。唯一的区别是它们期望当前定义它们的泛型类型或类。

float 变量.cs

using UnityEngine;
[CreateAssetMenu(fileName = "New FloatVar", menuName = "Variables/FloatVar")]
public class FloatVar : BaseVarDef<float>
{
public void SetValue(FloatVar value)
{
Value = value.Value;
}
public void ApplyChange(float amount)
{
Value += amount;
}
public void ApplyChange(FloatVar amount)
{
Value += amount.Value;
}
}

字符串变量.cs

using UnityEngine;
[CreateAssetMenu(fileName = "New StringVar", menuName = "Variables/StringVar")]
public class StringVar : BaseVarDef<string>
{
public void SetValue(StringVar value)
{
Value = value.Value;
}
public void ApplyChange(string amount)
{
Value += amount;
}
public void ApplyChange(StringVar amount)
{
Value += amount.Value;
}
}

有没有办法将 SetValue 和 2 个重载的 ApplyChange 方法重构到 BaseVarDef.cs 中?

提前致谢

最佳答案

我认为你可以在基类中定义所有的Apply和Set

public abstract class BaseVarDef<T>
{
public string DeveloperDescription = "";

public T Value;

public void SetValue(T value)
{
Value = value;
}
public void SetValue(BaseVarDef<T> value)
{
Value = value.Value;
}
public void ApplyChange(T amount)
{
AddValue(amount);
}
public void ApplyChange(BaseVarDef<T> amount)
{
AddValue(amount.Value);
}

protected abstract void AddValue(T val);
}

public class FloatVar : BaseVarDef<float>
{
protected override void AddValue(float val)
{
Value += val;
}
}

关于c# - 将类似的方法移动到通用实现中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55405325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com