Search
Active

9
Sign in to vote
1
Sign in to vote
Sign in
to vote
Type: Suggestion
ID: 344655
Opened: 5/17/2008 6:26:46 AM
Access Restriction: Public
0
Workaround(s)
 C#は数値型の基本型として語長が異なる複数の型をサポートしています。符号付整数ではshort,int,long、浮動小数点数ではfloatとdoubleがあります。
 プログラム作成者としては、語長が異なる以外は同じ性質を持つ基本型について実装をを抽象化したいと考えます。
 現在のC#のジェネリックでは数値型に共通する演算を制約に記述できないため実現不可能です。例えばfloat[]の平均値を求めるメソッドとdouble[]の平均値を求めるメソッドをジェネリックを使って1つにまとめることができません。

例えば次のようなことを検討して欲しい
(1)ジェネリックの制約に演算子を記述できるようにして欲しい
(2)インターフェースに演算子を記述する構文を追加して欲しい。
(3)上記の基本型に各演算子に相当するメソッドおよびそのインターフェースを追加して欲しい。
Details (expand)
製品言語
日本語
バージョン
.NET Framework 3.5
オペレーティング システム
Vista
オペレーティング システム言語
日本語
現状の問題点
該当せず。
問題解決のための提案
該当せず。
File Attachments
0 attachments
Sign in to post a comment.
Posted by Microsoft on 5/19/2008 at 2:39 AM
フィードバックをお送りいただきまして、ありがとうございます。いただいた報告内容に基づき、現在問題を調査中です。しばらくお待ちください。

Visual Studio Product Team

Description:
C# supports multiple different length types as a basic numeric type.
As signed integer, short, int, and long. As floating point, float and double.
As a programmer, several different basic types having just the length needs to be abstracted when compiling.

For example, a method for the average in float[] and in double[] cannot be integrated using generics because it is unable to write the list about constraining operations.

The following are need to be considered.
1) Writing constrain g operations in generics constrain list is desired.
2) Adding a statement to write operations to an interface.
3) Basic types (such as short, int, long, float and double)need methods and the interface for each operation.

Problem Statement:
none

Proposed Solution:
none

Posted by NyaRuRu on 11/10/2008 at 3:38 AM
>C#は数値型の基本型として語長が異なる複数の型をサポートしています。符号付整数ではshort,int,long、浮動小数点数ではfloatとdoubleがあります。
>プログラム作成者としては、語長が異なる以外は同じ性質を持つ基本型について実装をを抽象化したいと考えます。

整数型と浮動小数点数型には性質の違いもあり,抽象化はそれほど簡単な話でもありません.

//例1 浮動小数点数では Equals と == が一対一に対応しない
Console.WriteLine((Double.NaN).Equals(Double.NaN));
Console.WriteLine(Double.NaN == Double.NaN);
//結果
//True
//False

//例2 浮動小数点数では CompareTo と比較演算子が一対一に対応しない
Console.WriteLine((Double.NaN).CompareTo(Double.NaN));
Console.WriteLine(Double.NaN < Double.NaN);
Console.WriteLine(Double.NaN == Double.NaN);
Console.WriteLine(Double.NaN > Double.NaN);
//結果
//0
//False
//False
//False

int[] と double[] への操作を統一するときなどに,このような微妙なセマンティクスの違いもきちんと考慮する必要があります.