【C#】JavaとC#の書き方の違い

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("わんわん!");
    }
}

まとめ

JavaC#
コンソール出力System.out.println()Console.WriteLine()
パッケージの読み込みimportusing
文字列型Stringstring
論理値型booleanbool
ディクショナリHashMapDictionary
プロパティgetter、setterget、set
インターフェースの実装implements:
クラスの継承extends:
継承の禁止finalsealed
再代入の禁止finalreadonly
オーバーライドの禁止finalsealed
オーバーライド@Overrideoverride
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

電気制御設計→ITエンジニア
前職は電気系のエンジニアで物流倉庫などの設備を動かしていました。
現在はITエンジニアとして開発に従事。
業務では主にUnity、C#、.NETを利用。
現在、UnityとC#を用いて業務用スマホアプリを開発中。

目次