###前提・実現したいこと
C#でintやdoubleといったプリミティブ型をそのまま使わずラップしたい
void set_time(int hour, int minute, int second){...} ではなく
void set_time(Hour hour, Minute minute, Second second){...} のように
表現したい
###該当のソースコード
public class WrapperPrimitive<Type> { private readonly Type value; public WrapperPrimitive(Type value) { this.value = value; } public static explicit operator WrapperPrimitive<Type>(Type value) { return new WrapperPrimitive<Type>(value); } public static explicit operator Type(WrapperPrimitive<Type> temp) { return temp.value; } public override bool Equals(object obj) { if (obj == null) { return false; } if (this.GetType() != obj.GetType()) { return false; } WrapperPrimitive<Type> c = (WrapperPrimitive<Type>)obj; return (this.value == c.value); } //VSの補完が自動で作成 無いと警告が出るので残す public override int GetHashCode() { return base.GetHashCode(); } } public class Second: WrapperPrimitive<int> { public Second(int value) : base(value) { } }
###発生している問題・エラーメッセージ
public override bool Equals(object obj)関数のreturn (this.value == c.value);箇所で operator cannot be applied to operands of type 'Type' and 'Type'
###試したこと
https://msdn.microsoft.com/ja-jp/library/ms173147(v=vs.90).aspx
等を参考に自分なりにoperator==をオーバーロードしてみましたがうまくいきませんでした。
###補足情報(言語/FW/ツール等のバージョンなど)
いつも参考にさせていただいております。
C#初心者の為見当違いの質問でしたらお許しください。
上記案件について
・なぜうまくいかないか
・そもそもC#で型をラップするようなやり方は推奨されるのか
の2点についてご教授いただけると幸いです。
稚拙な質問でご迷惑かと思いますが宜しくお願い致します。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/26 10:21