C#(シーシャープ)は、Microsoftが開発した、.NET構想の中核となるオブジェクト指向プログラミング言語です。

目次

公開時期

2000年

概要

  • Microsoftが開発した、.NET構想の中核となるオブジェクト指向プログラミング言語
  • Delphiの開発者アンダース ヘルスバーグがチーフ・アーキテクトとして参加
  • 国際標準化機関のEcma International、ISOや、日本工業規格JISにおいて標準規格化
  • C#のコードはコンパイラにより中間言語MSIL(MicroSoft Intermediate Language)に変換される
    実行時にはMSILが仮想マシンCLR(Common Language Runtime)上にて実行される
  • C#はC++をさらに進めたC++++から来ている
    開発中はCOOL(C like Object Oriented Language:Cライクなオブジェクト指向言語)と呼ばれていた

言語仕様

クラスの宣言

class MyClass
{
}
 

クラスの継承

class SuperClass
{
}
class MyClass : SuperClass
{
}
 

抽象クラス

abstract class AbstractClass
{
}
class MyClass : AbstractClass
{
}
class MainClass
{
  static void Main(string[] args)
  {
    MyClass myclass1 = new MyClass();
    // 次の行はコンパイルエラーとなる。
    // AbstractClass abstractClass1 = new AbstractClass();
  }
}
 

継承不可のクラス

sealed class SealedClass
{
}
// 以下はコンパイルエラーとなる。
// class MyClass : SealedClass
// {
// }
 

基本クラスの参照

class SuperClass
{
  public void Method()
  {
  }
}
class MyClass : SuperClass
{
  private void MyMethod()
  {
    base.Method();
  }
}
 

クラス自身の参照

class MyClass
{
  private void MyMethod1()
  {
    this.MyMethod2();
  }
  private void MyMethod2()
  {
  }
}
 

オブジェクトの生成

class MyClass
{
}
class MainClass
{
  static void Main(string[] args)
  {
    MyClass myClass1 = new MyClass();
  }
}
 

オブジェクトの初期化(コンストラクタ)

class MyClass
{
  public MyClass()
  {
  }
}
 

インターフェイスの宣言

interface IInterface
{
}
 

実装するインターフェイスの指定

class MyClass : IInterface
{
}
 

列挙型の宣言

enum Days
{
  Mon,
  Tue,
  Wed,
  Thu,
  Fri,
  Sat,
  Sun
}
 

フィールドの宣言

class MyClass
{
  //変数の宣言
  int a;
 
  //定数の宣言
  const int b = 1;
 
  //readonlyの宣言
  readonly int c = 2;
}
 

1次元配列の宣言

class MyClass
{
  //初期化なし
  int[] a = new int[2];
 
  //初期化あり
  int[] b = new int[] { 1, 2 };        
}
 

2次元配列の宣言

class MyClass
{
  //初期化なし
  int[,] a = new int[2, 2];
 
  //初期化あり  
  int[,] b = new int[,] { { 1, 2 }, { 3, 4 } };
}
 

プロパティの宣言

class MyClass
{
  private int myVar;
  public int MyProperty
  {
    get
    {
      return myVar;
    }
    set
    {
      myVar = value;
    }
  }
}  
 

メソッドの宣言

class MyClass 
{ 
  public void MyMethod() 
  { 
  } 
}
 

メソッドのオーバーライド

class SuperClass 
{ 
  public virtual void Method() 
  { 
  } 
} 
class MyClass : SuperClass 
{ 
  public override void Method() 
  { 
  } 
}
 

メソッドのオーバーロード

class MyClass 
{ 
  public void MyMethod(int x) 
  {
  }
  public void MyMethod(int x, int y) 
  {
  }
} 
 

例外処理

static void Main()
{
  try
  {
    //例外の発生する可能性のある処理
  }
  catch
  {
    //例外時の処理
  }
  finally
  {
    //例外の有無に関わらず実行させる処理
  }
}
 

デリゲート

delegate void MyDelegate();
public class MyClass
{
  static void Main()
  {
    MyDelegate myDelegate;
 
    //デリゲートにメソッドMethod1の参照を代入
    myDelegate = new MyDelegate(Method1);
        //省略して記述も可能
        //myDelegate = Method1;
 
    //デリゲートにメソッドMethod2の参照を追加
    myDelegate += new MyDelegate(Method2);  
        //省略して記述も可能
        //myDelegate += Method2;
    
        myDelegate();
  }
  static void Method1()
  {
  }
  static void Method2()
  {
  }
}
 

名前空間

// N1
namespace N1
{
  // N1.C1
  class C1
  {
  }
  //N1.N2
  namespace N2
  {
    //N1.N2.C2
    class C2
    {
    }
  }
}
 
最終更新:2009年12月10日 19:18