当前位置: 首页 > news >正文

接口实现C#泛型四则运算

一般我们会对泛型字段做封装,使其支持OnChange、IsDirty等字段功能扩展,例如:

IObservable<float> hitPoint;

 

而有些字段则有挂载修改器的需求,修改器若使用lambda则对序列化不友好,因此考虑自行封装四则运算供修改器

给原始数值进行修改,但C#早期没有四则运算的接口。网上的dynamic动态类型做法对多平台并不友好。

 

不转弱类型的情况下,考虑通过接口解决,代码如下:

public interface IArithmeticOperator<T>
{public T Add(T x, T y);public T Sub(T x, T y);public T Mul(T x, T y);public T Div(T x, T y);
}public static class ArithmeticOperator<T>
{public static IArithmeticOperator<T> Instance;static ArithmeticOperator(){var type = typeof(T);if (type == typeof(int))Instance = (IArithmeticOperator<T>)(object)new IntAritOp();else if (type == typeof(float))Instance = (IArithmeticOperator<T>)(object)new FloatAritOp();}
}public class IntAritOp : IArithmeticOperator<int>
{public int Add(int x, int y) => x + y;public int Div(int x, int y) => x / y;public int Mul(int x, int y) => x * y;public int Sub(int x, int y) => x - y;
}public class FloatAritOp : IArithmeticOperator<float>
{public float Add(float x, float y) => x + y;public float Div(float x, float y) => x / y;public float Mul(float x, float y) => x * y;public float Sub(float x, float y) => x - y;
}public class AttributeModifier<T>
{private T _delta;public AttributeModifier(T delta) { this._delta = delta; }public T Add(T current) => ArithmeticOperator<T>.Instance.Add(current, _delta);public T Sub(T current) => ArithmeticOperator<T>.Instance.Sub(current, _delta);public T Mul(T current) => ArithmeticOperator<T>.Instance.Mul(current, _delta);public T Div(T current) => ArithmeticOperator<T>.Instance.Div(current, _delta);
}public class Test01 : MonoBehaviour
{void Start(){var op01 = new AttributeModifier<int>(10);var op02 = new AttributeModifier<int>(2);int hitPoint = 0;hitPoint = op01.Add(hitPoint);hitPoint = op02.Mul(hitPoint);Debug.Log(hitPoint);//20var op03 = new AttributeModifier<float>(4.5f);var op04 = new AttributeModifier<float>(2.2f);float stamina = 0f;stamina = op03.Add(stamina);stamina = op04.Mul(stamina);Debug.Log(stamina);//9.900001
    }
}

 

http://www.jsqmd.com/news/30527/

相关文章:

  • [Flink/Hologres/汽车] 骋在数据洪流上:Flink+Hologres驱动零跑科技实时计算的应用与实践 [转]
  • openssl 3和qt5好像打架哎
  • 给一个百分制成绩,要求输出成绩等级‘A,B,C,D,E
  • 大模型应用开发技术路线(上):从概念到RAG实战,这套方法论让我从0到1落地企业级AI应用
  • 20251103 之所思 - 人生如梦
  • COMSOL Multiphysics 6.3 软件下载安装教程(包含许可证设置),从获取安装包到成功启动
  • COMSOL Multiphysics 6.3 软件下载安装教程(包含许可证设置),从获取安装包到成功启动
  • 11月3日
  • 2025.11.3
  • 2025.11.3总结
  • Python中的数据串用:以推荐系统中“用户偏好管理”为例
  • JOIST/JOISC 板刷计划
  • 11.3日学习笔记
  • Serilog 日志库简单实践(二):控制台与调试 Sinks(.net8)
  • Stable Diffusion v4.8 保姆级下载安装教程:新手零失败实操指南(含 ControlNet 配置)
  • 6-10 阶乘计算升级版 (20 分)
  • 每日收货
  • 【C130x 离在线】Python使用import opuslib 报错解决方案
  • 读《Python神经网络编程(异步图书) 塔里克拉希德》有感
  • 【CI130x 离在线】Python使用import opuslib 报错解决方案
  • 002 vue3-admin项目的目录及文件说明之.gitignore文件
  • 2025.11.03 正睿
  • 使用QSPI驱动PM004MNIA
  • c++虚函数与纯虚函数解析
  • 杂谈:关于java帝国的一些内容
  • 11月3日日记
  • 洛谷 P3615
  • 蒟蒻的S游记碎碎念
  • 简单五子棋对战(AI生成)
  • 扬贺扬国产DDR4、国产NAND存储、国产EMMC存储