Android Studioを使ったり、技術書を読んでたりするとJavaのコードを読むことが多かったりします。
そういう時にC#だったら何だっけと思うことが多かったので、
JavaとC#の書き方の違いについてまとめてみました。
気になる単語があったら、ぜひこのページでショートカットの
ctr + F(command + F)を押してもらって調べてみてください。
目次
コンソール出力
Java→System.out.println C#→Console.WriteLine
【Java】
class Hello
{
public static void main(String[] args)
{
// ★コンソール出力
System.out.println("こんにちは");
}
}
【C#】
public class Hello
{
static void Main(String[] args)
{
// ★コンソール出力
Console.WriteLine("こんにちは");
}
}
パッケージの読み込み
Java→import C#→using
【Java】
例はAndroid Studioでパッケージを読み込む記述。
import android.os.Bundle;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
【C#】
例はUnityでパッケージを読み込む記述。
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
プリミティブ型
プリミティブ型とはプログラミング言語が標準で用意している基本データ型のこと。
【文字列型】Java→String C#→string
Javaでは大文字、C#では小文字なので注意。
【Java】
class Program
{
public static void main(String[] args)
{
// ★String
String name = "Mario";
System.out.println(name);
}
}
【C#】
public class Program
{
static void Main(string[] args)
{
// ★string
string name = "Mario";
Console.WriteLine(name);
}
}
【論理値型】Java→boolean C#→bool
【Java】
boolean isCheckBox = true
【C#】
bool isCheckBox = true
ディクショナリ
Java→HashMap C#→Dictionary
ディクショナリとはキーと値をセットで要素を管理するもの。
キーは重複できず、順番も持たない。
JavaではHashMap、C#はDictionaryを使う。
【Java】
// ★HashMap
private final Map<MagicType, Magic> magics = new HashMap<>();
Fire fire = new Fire(member);
Shiden shiden = new Shiden(member);
HellFire hellFire = new HellFire(member);
// ★HashMapに追加
magics.put(MagicType.Fire, fire);
magics.put(MagicType.Shiden, shiden);
magics.put(MagicType.HellFire, hellFire);
【C#】
// ★Dictionary
private readonly Dictionary<MagicType, Magic> magics = new Dictionary<MagicType, Magic>();
var fire = new Fire(member);
var shiden = new Shiden(member);
var hellFire = new HellFire(member);
// ★Dictionaryに追加
magics.Add(MagicType.Fire, fire);
magics.Add(MagicType.Shiden, shiden);
magics.Add(MagicType.HellFire, hellFire);
プロパティ
Java→getter、setter C#→get、set
Javaではgetter、setterと呼び、
C#はget、setという。
【Java】
public class Product {
public String name;
public int price;
// ★getter
public String getName() {
return name;
}
// ★setter
public void setName(String name) {
this.name = name;
}
// ★getter
public int getPrice() {
return price;
}
// ★setter
public void setPrice(int price) {
this.price = price;
}
}
【C#】
public class Product
{
// ★get、set
public string name { get; set; }
public int price { get; set; }
}
インターフェースの実装
Java→implements C#→ :
【Java】
public interface Sports {
void exercise();
}
// ★インターフェースの実装
public class Soccer implements Sports {
@Override
public void exercise()
{
System.out.println("ボールを蹴ります");
}
}
【C#】
public interface ISports {
void exercise();
}
// ★インターフェースの実装
public class Soccer : ISports
{
public void exercise()
{
Console.WriteLine("ボールを蹴ります");
}
}
クラスの継承
Java→extends C#→ :
【Java】
class Person {
public String firstName;
public String lastName;
public String showName() {
return "名前は" + lastName + firstName + "です";
}
}
// ★クラスの継承
class BusinessPerson extends Person {
public String work() {
return lastName + firstName + "は働く";
}
}
public class Main {
public static void main(String[] args) {
BusinessPerson businessPerson = new BusinessPerson();
businessPerson.firstName = "一郎";
businessPerson.lastName = "田中";
System.out.println(businessPerson.showName());
System.out.println(businessPerson.work());
}
}
【C#】
public class Person
{
public string FirstName;
public string LastName;
public string ShowName()
{
return "名前は" + LastName + FirstName + "です";
}
}
// ★クラスの継承
public class BusinessPerson : Person
{
public string Work()
{
return LastName + FirstName + "は働く";
}
}
public class Program
{
static void Main(string[] args)
{
var businessPerson = new BusinessPerson
{
FirstName = "一郎",
LastName = "田中"
};
Console.WriteLine(businessPerson.ShowName());
Console.WriteLine(businessPerson.Work());
}
}
継承の禁止
Java→final C#→sealed
【Java】
// ★継承の禁止
public final class Person
{
public String FirstName;
public String LastName;
public String showName()
{
return "名前は" + LastName + FirstName + "です";
}
}
// ★エラー!
public class BusinessPerson extends Person
{
}
【C#】
// ★継承の禁止
public sealed class Person
{
public string FirstName;
public string LastName;
public string ShowName()
{
return "名前は" + LastName + FirstName + "です";
}
}
// ★エラー!
public class BusinessPerson : Person
{
}
再代入の禁止
Java→final C#→readonly
【Java】
// ★再代入の禁止
final double taxRate = 0.08
// ★エラー!
taxRate = 0.05
【C#】
// ★再代入の禁止
private readonly double TaxRate = 0.08;
// ★エラー!
TaxRate = 0.05;
オーバーライドの禁止
Java→final C#→sealed
【Java】
class DateShow {
private LocalDateTime now;
public DateShow() {
now = LocalDateTime.now();
}
public String message() {
now = LocalDateTime.now();
return now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
}
class Greeting extends DateShow {
// ★継承の禁止
@Override
public final String message() {
return "Hello!";
}
}
class ChineseGreeting extends Greeting {
// ★Greetingのmessageメソッドはfinalなのでエラー!
public String message() {
return "你好";
}
}
【C#】
class DateShow
{
private DateTime now;
public DateShow()
{
now = new DateTime();
}
public virtual string Message()
{
now = DateTime.Now;
return now.ToString();
}
}
class Greeting : DateShow
{
// ★継承の禁止
public sealed override string Message()
{
return "Hello!";
}
}
class ChineseGreeting : Greeting
{
// ★GreetingのMessageメソッドでsealedしているのでエラー!
public override string Message()
{
return "你好";
}
}
finalにはつける箇所によって意味が変わってきます
- クラス→継承の禁止
- 変数→再代入の禁止
- メソッド→オーバーライドの禁止
オーバーライド
Java→@Override C#→override
Javaの “@” はアノテーションといい、こちらをつけることで事前にエラーや警告を出してくれる。
つまり、バグやエラーの原因を特定しやすくなる。
【Java】
public class Animal {
public void cry() {
System.out.println("動物の鳴き声");
}
}
public class Dog extends Animal {
// ★オーバーライド
@Override
public void cry() {
System.out.println("わんわん!");
}
}
【C#】
public class Animal
{
public virtual void Cry()
{
Console.WriteLine("動物の鳴き声");
}
}
public class Dog : Animal
{
// ★オーバーライド
public override void Cry()
{
Console.WriteLine("わんわん!");
}
}
まとめ
Java | C# | |
コンソール出力 | System.out.println() | Console.WriteLine() |
パッケージの読み込み | import | using |
文字列型 | String | string |
論理値型 | boolean | bool |
ディクショナリ | HashMap | Dictionary |
プロパティ | getter、setter | get、set |
インターフェースの実装 | implements | : |
クラスの継承 | extends | : |
継承の禁止 | final | sealed |
再代入の禁止 | final | readonly |
オーバーライドの禁止 | final | sealed |
オーバーライド | @Override | override |