C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: 参照パラメーター C#


(過去ログ 114 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■67196 / inTopicNo.1)  参照パラメーター C#
  
□投稿者/ 外山弘 (1回)-(2013/07/13(Sat) 15:15:49)

分類:[.NET 全般] 

今、独習C#の本をやっていて質問です。
環境:.NET Framework Version 4.0

以下のコードの6行目と18行目の int を試しに short に変えてみたんですが、
このようなエラーになりました。
なんでなのでしょうか?

型 'int' を 'short' に暗黙的に変換できません。明示的な変換が存在します。(cast が不足していないかどうかを確認してください)

教えて下さい。
--------------------------------------------------
using System;

class RefTest
{
//このメソッドは実引数を変更する
public void Sqr(ref int i) //パラメーターの宣言の前にrefを指定
{
i = i * i;
}
}

class RefDemo
{
static void Main()
{
RefTest ob = new RefTest();

int b = 10;

Console.WriteLine("b befor call: " + b);

ob.Sqr(ref b); //引数の前にrefを指定
Console.WriteLine("b after call: " + b);
}
}
引用返信 編集キー/
■67197 / inTopicNo.2)  Re[1]: 参照パラメーター C#
□投稿者/ επιστημη (58回)-(2013/07/13(Sat) 16:03:29)
επιστημη さんの Web サイト
C#言語仕様 7.3.6 Numeric promotions によりますと
二項演算☆には以下のルールがあらかじめ定義されていて:
int operator ☆(int x, int y);
uint operator ☆(uint x, uint y);
long operator ☆(long x, long y);
ulong operator ☆(ulong x, ulong y);
float operator ☆(float x, float y);
double operator ☆(double x, double y);
decimal operator ☆(decimal x, decimal y);

上記以外の型 x, y に対する演算では
暗黙の型変換が施された後に 上記演算が行われるみたい。

で、今回 short * short ですからこのルールに従い
int * int となり、結果は int です。

そいつを short に書き戻す際、short から int へは
暗黙の変換が行われないため、

> 型 'int' を 'short' に暗黙的に変換できません。明示的な変換が存在します。
> (cast が不足していないかどうかを確認してください)

となるみたいっすよ。


引用返信 編集キー/
■67198 / inTopicNo.3)  Re[2]: 参照パラメーター C#
□投稿者/ 外山弘 (2回)-(2013/07/13(Sat) 22:40:17)
επιστημη さん
回答ありがとうございます
そういうことでしたか。
よく理解しておきます。

No67197 (επιστημη さん) に返信
> C#言語仕様 7.3.6 Numeric promotions によりますと
> 二項演算☆には以下のルールがあらかじめ定義されていて:
> int operator ☆(int x, int y);
> uint operator ☆(uint x, uint y);
> long operator ☆(long x, long y);
> ulong operator ☆(ulong x, ulong y);
> float operator ☆(float x, float y);
> double operator ☆(double x, double y);
> decimal operator ☆(decimal x, decimal y);
>
> 上記以外の型 x, y に対する演算では
> 暗黙の型変換が施された後に 上記演算が行われるみたい。
>
> で、今回 short * short ですからこのルールに従い
> int * int となり、結果は int です。
>
> そいつを short に書き戻す際、short から int へは
> 暗黙の変換が行われないため、
>
>>型 'int' を 'short' に暗黙的に変換できません。明示的な変換が存在します。
>>(cast が不足していないかどうかを確認してください)
>
> となるみたいっすよ。
>
>
引用返信 編集キー/
■67199 / inTopicNo.4)  Re[3]: 参照パラメーター C#
□投稿者/ επιστημη (59回)-(2013/07/14(Sun) 06:24:59)
επιστημη さんの Web サイト
2013/07/14(Sun) 06:25:39 編集(投稿者)
ま、そーゆーわけで

  short a = 0;
  a = a + 1;

こんだけで同様のエラーとなりま(す|した)。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -