<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      實現(xiàn)C#泛型四則運算等特化操作

      有些情況下我們會對字段做泛型封裝,使其支持OnChange、IsDirty等統(tǒng)一的功能擴(kuò)展,例如:

      IObservable<float> hitPoint;

       

      而有些字段有掛載修改器的需求,修改器若使用lambda則對序列化不友好,因此考慮自行封裝四則運算供修改器

      給原始數(shù)值進(jìn)行修改,但C#早期沒有四則運算的接口(Interface)。網(wǎng)上的dynamic動態(tài)類型做法對多平臺也不太好。

      (注:使用擴(kuò)展方法實現(xiàn)的特化,和這類泛型內(nèi)特化不太一樣)

       

      不轉(zhuǎn)弱類型的情況下,仍考慮通過接口解決,代碼如下:

      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 Attribute<T>
      {
          private T _Value;
          private AttributeModifier<T> _Modifier;
      
      
          public Attribute(T value, AttributeModifier<T> modifier)
          {
              _Value = value;
              _Modifier = modifier;
          }
      
          public T GetValue()
          {
              // 假設(shè)都是乘操作,省略邏輯
              return _Modifier.Mul(_Value);
          }
      }
      
      public class Test01 : MonoBehaviour
      {
          void Start()
          {
              var hp = new Attribute<int>(100, new AttributeModifier<int>(10));
              Debug.Log(hp.GetValue());//1000
              var stamina = new Attribute<float>(25.5f, new AttributeModifier<float>(2f));
              Debug.Log(stamina.GetValue());//51
          }
      }

       

       

      而如果需要擴(kuò)展,如屬性修改器需要直接在泛型類的基礎(chǔ)上支持序列化接口,可以這么寫:

      #region BinarySerializeOperator
      public interface IBinarySerializeOperator<T>
      {
          public void Serialize(BinaryWriter writer, T inValue);
          public T Deserialize(BinaryReader reader);
      }
      
      public static class BinarySerializeOperator<T>
      {
          public static IBinarySerializeOperator<T> Instance;
      
          static BinarySerializeOperator()
          {
              var type = typeof(T);
      
              if (type == typeof(int))
                  Instance = (IBinarySerializeOperator<T>)(object)new IntBinSeriOp();
              else if (type == typeof(float))
                  Instance = (IBinarySerializeOperator<T>)(object)new FloatBinSeriOp();
          }
      }
      
      public class IntBinSeriOp : IBinarySerializeOperator<int>
      {
          public int Deserialize(BinaryReader reader)
          {
              return reader.ReadInt32();
          }
      
          public void Serialize(BinaryWriter writer, int inValue)
          {
              writer.Write(inValue);
          }
      }
      
      public class FloatBinSeriOp : IBinarySerializeOperator<float>
      {
          public float Deserialize(BinaryReader reader)
          {
              return reader.ReadSingle();
          }
      
          public void Serialize(BinaryWriter writer, float inValue)
          {
              writer.Write(inValue);
          }
      }
      #endregion
      
      
      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 void Serialize(BinaryWriter writer) => BinarySerializeOperator<T>.Instance.Serialize(writer, _delta);
          public void Deserialize(BinaryReader reader) => _delta = BinarySerializeOperator<T>.Instance.Deserialize(reader);
      }

       

      posted @ 2025-11-04 00:07  HONT  閱讀(4)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲色成人网站www永久| 亚洲综合成人一区二区三区 | 国产成人午夜福利精品| av无码小缝喷白浆在线观看| 亚洲熟女综合色一区二区三区 | 蜜桃精品成人影片| 无套内谢少妇毛片aaaa片免费| 99国精品午夜福利视频不卡99| 黑巨人与欧美精品一区| 女女互揉吃奶揉到高潮视频| 人妻丰满熟妇av无码处处不卡| 成人毛片一区二区| 国产精品黄色片在线观看| 沂南县| 国产精品SM捆绑调教视频| 欧美日韩v| 日韩久久久久久中文人妻 | 成人拍拍拍无遮挡免费视频| 亚洲男人的天堂网站| 亚洲欧美一区二区成人片| 天堂网亚洲综合在线| 4虎四虎永久在线精品免费| 日韩精品一区二区三区激| 国内在线视频一区二区三区| jlzz大jlzz大全免费| 日本不卡一区二区三区在线| 亚洲制服无码一区二区三区| 日韩中文字幕av有码| 亚洲av成人一区二区三区| 欧美18videosex性欧美黑吊| 国产毛片基地| 亚洲精品一区二区三区四区乱码| 116美女极品a级毛片| 少妇高潮激情一区二区三| 精品国产一区二区三区四区| AV最新高清无码专区| 精品久久久久久无码不卡| 中文字幕第一页国产| av午夜福利亚洲精品福利| 伊大人香蕉久久网欧美| 免费无码久久成人网站入口|