
こんにちは。毎度皆さんにお世話になっているc#初心者です。
c#にも暗黙/明示的型変換を定義することが出来ますよね? それで、どこまでのものが暗黙の型変換として許容されるかということが疑問になり質問させていただきました。毎度のことですがライブラリ内のクラス・構造体についてです。
例えば、あんまり意味はありませんが、百分率を表す構造体
public struct Percentage
{
private int _percentage;
}
があり、その内部で
public static implicit operator Percentage(int value)
{ return new Percentage(value); }
程度なら十分許される範囲だと思います(間違っていたらご指摘ください)。
ですが、例えば、「System.Drawing.Color」構造体と同じものを作ったとして、本来「FromName」メソッドで処理するのが妥当と思われる「string」から「Color」への変換を
puclic static explicit operator Color(string name)
{ return FromName(name); }
のようにしてしまうのはまずいのでしょうか? 多分まずいですよね。だとすると、どの程度の変換がボーダーラインなのか(出来れば具体例もあれば助かります)知りたいのですが、どなたか詳しい方はいらっしゃいませんか?
No.1ベストアンサー
- 回答日時:
私の判断はどちらも不可。
まず,基本的なところ。
MSDN: 変換演算子
http://msdn.micosoft.com/ja-jp/library/ms229033. …
後者の例について,
> 型のドメインの外部で変換演算子を定義しないでください。
に反する以上,変換演算子を「定義すべきではない」となる。
次に,前者について,本質的に百分率の値である以上,10%は0.10mと等しいはず。
さらに,intをPercentageに変換したい場合,値を保持するのか,表現を保持する(=1/100の値を保持する) のか,両方の要求が存在する。
故に,intからPercentageへの変換は明示的な名前のついたメソッドで行うべき。
# decimalへのimplicit castは必要であればあってもよい。
この回答への補足
毎度毎度、回答・ご指摘ありがとうございます。
> 私の判断はどちらも不可。
そうですね。よく考えればこの前読みました。もう少しいい例を考えるべきでした。
ただ、少し、補足させてください。
> 本質的に百分率の値である以上,10%は0.10
> intをPercentageに変換したい場合,値を保持するのか,表現を保持する(=1/100の値を保持する) のか
百分率の値ではなく、百分率そのものです。前記の型変換がよいかどうかはともかく、百分率が整数であるとしたのは「System.ComponentModel.ProgressChangedEventArgs」の「ProgressPercentage」を見てください。整数型になっているはずです。
また、辞書によると
「全体を100としたとき、そのうちのいくらにあたるかということ。単位はパーセント。」
です。と言うわけで、百分率=整数と判断しました(上記の型変換がよいかどうかは別として)(間違いがあればご指摘ください)。
それともう一つ、本題のボーダーラインって分かりませんか? 曖昧かつ初歩的なな質問で苦労されるかと思いますが…。
回答ありがとうございました。
よく考えてみれば、今、ボーダーラインを曖昧に知っておくよりは、今後、個別にOKかNGかの質問をするほうが理にかなっているようです。
今回はこんな初心者に付き合ってくださってありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- Java java final 1 2022/06/10 22:49
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C++ 文字列変数と16進数の比較
-
VBAで1e-3を入力する方法
-
[pic] MikroCまたはPICC liteで...
-
TextBox内の改行
-
DBへのinsert文作成方法
-
文字列の中に半角文字があるか...
-
データセットの違いにつきまして
-
指定のフィールド内に選択され...
-
C#文字コードについて
-
SQLSERVERからデータを取得する...
-
.netでコンボボックスの設定方法
-
フィールドの分割
-
データ数の多い構造体配列について
-
エクセルVBAで実行時エラー7、...
-
VBA 変数名に変数を使用したい。
-
Excel VBAでグループ毎に集計す...
-
accessでフィールド追加のあと...
-
マルチバイト混在の文字列整形
-
EXCELのVBAでLenB関数について
-
外部ファイルから一部分を書き...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6.0の「vbFromUnicode」はVB....
-
VB.NETで1→A、2→B、26→Z、27→AA...
-
16進をASCIIコードに変換する...
-
WORD型をCString型に変換する方法
-
10進数を2進数
-
C#で文字列を数値に変換する方法
-
16進コード文字列を文字列に変換
-
VC++ std::stringからLPCWSTRに...
-
【C++/CLI】int型からString型...
-
Boolean型変数の値を反転する方法
-
型変換について (C++ Builder5)
-
文字型を日付/時刻型に変換する...
-
textbox.textやlabel.captionの...
-
ASPでVBのFormat関数のような機...
-
VB6.0 String型→Long型変換方法...
-
Excelの数字(文字列)合計につい...
-
2進数から10進数へ変換
-
vb6の桁数指定
-
n進数の値を10進数の値に変換す...
-
数字→漢数字変換
おすすめ情報