超初心者向け C# のClass とは 参照型である


プロダクトで業務ばかりやっていると、基本的なところを全く気にせずに時間がたってしまいます。

先日C#チョットできるヒト(社内ではない)と会話する機会という名の
サンドバック面談 1on1(社内ではない) がありまして

C#のパフォーマンスと本当の基礎の基礎を学ばないといけないなという気になりました。

9月末に .NET Core 3.0 がリリースされました
個人的にはblazor がとても気になってます。

結局のところ、公式ガイドを読むのが一番いいのですが、


Class (C#)

  • 参照型
  • new することで object となる
  • new を使って明示的に作成されるまで class内部の変数にはNullが入る
Myclass.cs
//これが MyClass という class
public class MyClass
{

}

Classを実際に使うには new を使って実体化させます→Objectになります。
Classから作られたObjectはインスタンスとも言います。

Program.cs
class Program
    {
        static void Main(string[] args)
        {
           //ここでインスタンスになる(Objectになる)
           MyClass mc = new MyClass();
        }
    }

Class は 参照型 なので クラスの型を参照することができます。
mc2 という MyClassを用意してそれの実態を参照します

Program.cs
class Program
    {
        static void Main(string[] args)
        {
           //ここでインスタンスになる(Objectになる)
           MyClass mc = new MyClass();
           MyClass mc2 = mc;
        }
    }

上記2つを合わせます Myclassも同一ファイルにかけるので、
下記のようになります

Program.cs

//classの中に プロパティとコンストラクタを定義
public class MyClass
{
    public string ClassName{ get; set; }
    public int ClassId { get; set; }

    public MyClass(string name, int id)
    {
        ClassName= name;
        ClassId = id;
    }
}

class Program
    {
        static void Main(string[] args)
        {
           //ここでインスタンスになる(Objectになる)
           MyClass mc = new MyClass("hoge",1); //Classname = hoge, ClassId = 1 のMyClassインスタンス 
           MyClass mc2 = mc;

           //MyClassは 読み書きできるので mc2を使って変数を変えてみます
           mc2.Classname = "hogehoge";
           mc2.ClassId = 2;

           //参照型なので、mc  mc2のプロパティは下記のようになる
           //Output
           // mc.Classname is "hogehoge" 
           // mc.ClassId is 2
           // mc2.Classname is "hogehoge" 
           // mc2.ClassId is 2

        }
    }


尚 1on1(ではない)で下記を含んだいろいろま聞かれて 頭ぺっしゃんこになってたので

以下の疑問が解決できるまで記事を書き続けます

  • class と構造体の違いは?
  • それぞれのメリットとデメリットは?
  • class内のコンストラクタ、変数、プロパティ、メソッドはどう書いたら違いになる?
  • 〇〇の修飾子はどういう意味?
  • LINQはどういう処理と等価?