書き直し
実装は固定なのだから、プリミティブ型など多用される型の実装を毎回行う必要はなく
public struct FROAPrimitive : IFROAble, IFROAble , IFROAble , IFROAble , IFROAble , IFROAble , IFROAble , IFROAble , IFROAble , IFROAble , IFROAble , IFROAble , IFROAble { #region Add() public byte Add(byte left, byte right) { return left + right; } public char Add(char left, char right) { return left + right; } public short Add(short left, short right) { return left + right; } public int Add(int left, int right) { return left + right; } // : // : }
という構造体を用意しておけば問題ないし、実際に使う時にも、
public class xxxwhere I : IFROAble { private I fra = default(I); public T something(T some, T value) { // : } }
と、実体はクラスで1つあれば十分だろうし、後から他の型を演算しない前提のプリミティブ型だけに限定したクラスならばパラメータ型に I も取らなくていいよね〜ってところでしょうか。
あとは名前がいやな感じなので inteface IMath と struct Math に改名し、だらだら実装を足しておしまい!寝る!