Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9703

Java技術者のためのC#チートシート

$
0
0

背景

これまでJavaをメインに仕事してきたのですが、ほとんど触れてこなかったC#を仕事で使うことになったので勉強しました。
似ているところもありますが、思想の違いや微妙な書き方の違いがあるので「これどう書くんだっけ?」が絶対に起きると思いましたので、よく使いそうなところをピックアップしてチートシートとしてまとめてみました。
細かいところは追々知っていこうと思います。

使用するパッケージの宣言

Java

呼び出し方が違う。

importjava.util.ArrayList;

C#

usingSystem.Collections.Generic;

パッケージの定義

宣言が違う。
また思想も違うのでネーミングは注意。

Java

packageStudyPackage.com.anyplus

C#

namespaceStudyPackage// 思想が違うためドメインがない

アクセス修飾子

Javaにはないinternalprotected internalが存在する。
同じ修飾子でも思想の違いによることでアクセス可能範囲が異なる事にも注意。

修飾子JavaC#
publicどこからでもアクセス可能どこからでもアクセス可能
protected同一のパッケージ、または派生したクラスからアクセス可能派生したクラスからアクセス可能
internal存在しない同一のアセンブリ(DLL)内でアクセス可能
protected internal存在しない同一のアセンブリ(DLL)内、または格納しているクラスから派生した型からのみアクセス可能
private同じクラス内からのみアクセス可能同じクラス内からのみアクセス可能
指定なし
(default)
同一のパッケージ内でアクセスが可能privateと同じ扱い

同一のアセンブリ(DLL)とは
同一アセンブリとは、同一のexeファイルや、DLLファイルの事。
VisualStudioのソリューション内であれば、同一プロジェクトということらしい。

継承

継承するときは:(コロン)を使用する。
オーバーライドさせたいメソッドにはvirtualを付け、オーバーライドする時はoverrideをつける。
virtualoverrideを付けないと、インスタンスが生成されて利用可能状態となる。
オーバーライドしたくない時はnewをつける。

Java

classBase{publicvoidprintStr1(){System.out.println("Baseの1です");}publicvoidprintStr2(){System.out.println("Baseの2です");}}classSubAextendsBase{publicfinalvoidprintStr1(){System.out.println("SubAのprintStr1です");}publicvoidprintStr2(){System.out.println("SubAのprintStr2です");}}

C#

classBase{publicvoidprintStr1(){Console.WriteLine("Baseの1です");}publicvirtualvoidprintStr2(){Console.WriteLine("Baseの2です");}}classSubA:Base{publicnewvoidprintStr1(){Console.WriteLine("SubAのprintStr1です");}publicoverridevoidprintStr2(){Console.WriteLine("SubAのprintStr2です");}}

if文

違いなし。
Stringの比較は等値演算子でも値比較可能という違いがある。

Java

StringstrVal="";if("str".equals(strVal)){System.out.println("同じだよ");}else{System.out.println("違うよ");}

C#

stringstrVal="";if("str"==strVal){// 補足Console.WriteLine("同じだよ");}else{Console.WriteLine("違うよ");}

補足
String型を参照型なのでJavaでは等値演算子で比較すると同じインスタンスを参照しているかの比較になるが、C#の場合は裏でstring.equalsを呼び出しているためこの書き方でも値の比較が可能。
ただしstring.equalsメソッドには比較方法の指定が可能となるため、コードを書く時はstring.equalsメソッドが無難と思われる。

参照→String.Equalsメソッド - .NET Tips|dobon.net

switch文

違いなし

Java

intmonth=7;switch(month){case1:case2:case3:System.out.println("1Q");break;case4:case5:case6:System.out.println("2Q");break;case7:case8:case9:System.out.println("3Q");break;case10:case11:case12:System.out.println("4Q");break;default:System.out.println("不正な値です。");break;}

C#

intmonth=7;switch(month){case1:case2:case3:Console.WriteLine("1Q");break;case4:case5:case6:Console.WriteLine("2Q");break;case7:case8:case9:Console.WriteLine("3Q");break;case10:case11:case12:Console.WriteLine("4Q");break;default:Console.WriteLine("不正な値です。");break;}

for文

Javaの拡張for文はC#ではforeachとなる。

Java

for(inti=0;i<=10;i++){System.out.println(str);}String[]strArgs={"1","2"};for(Stringstr:strArgs){System.out.println(str);}

C#

for(inti=0;i<=10;i++){Console.WriteLine(str);}string[]strArgs={"1","2"};foreach(stringstrinstrArgs){Console.WriteLine(str);}

while文

前判定、後判定共に違いなし。

Java

inti=0;while(i<5){System.out.println(i);//0,1,2,3,4が出力されるi++;}do{System.out.println(i);//0,1,2,3,4が出力されるi++;}while(i<5);

C#

inti=0;while(i<5){Console.WriteLine(i);//0,1,2,3,4が出力されるi++;}do{Console.WriteLine(i);//0,1,2,3,4が出力されるi++;}while(i<5);

参考

C#とJavaの比較
C# 入門


Viewing all articles
Browse latest Browse all 9703

Trending Articles