C#
構造体
- 値型、つまりスタックに積まれるタイプのクラス的なやつ
- デフォルトコンストラクタ、デストラクタを開発者が定義することは出来ない
- 変数宣言、もしくはnewによるインスタンスの生成で作ることが出来る
- 構造体のメンバに参照型のフィールドがある場合は、newで作成しないとエラーになる、とあるがwandboxで試した感じ、エラーにならなかった…
- 構造体に参照型がメンバーとして含まれている場合は、メンバーの既定のコンストラクターを明示的に呼び出す必要があります。そうしないと、メンバーは未割り当てのままになり、構造体は使用できません (結果として、コンパイル エラー CS0171 が発生します)。 by https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/using-structs
using System;
struct Boge
{
public Hoge hoge;
}
class Hoge
{
public static void Main(string[] args)
{
Boge boge;
var hoge = boge.hoge;
}
}
色々な初期化子
- Javaに比べて色々な初期化子が用意されているのはすごく良い…
- https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/object-and-collection-initializers
- まずはオートプロパティを初期化するやつ
using System;
struct Boge
{
public int Count { get; set; }
}
class Hoge
{
public static void Main(string[] args)
{
var boge = new Boge { Count = 10 };
Console.WriteLine(boge.Count);
}
}
- リストとかディクショナリのようなコレクション
-
コレクションがインデックス作成をサポートしている場合は、インデックス付きの要素を指定することができます。 by https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/object-and-collection-initializers
- つまるところ、IEnumerableを継承して、indexerが定義されていれば、次のdictの初期化がどのクラスでも使えるということだろうか…そのうち検証したい
using System;
using System.Collections.Generic;
class Hoge
{
public static void Main(string[] args)
{
var list = new List<int> { 1, 2, 3 };
Console.WriteLine(list[2]);
var dict = new Dictionary<string, int> { ["test"] = 3, ["test2"] = 2 };
Console.WriteLine(dict["test"]);
}
}
ジェネリクス
- 魔物がひそむところだ
- erasableではない!(つまり実行時にリフレクションで型情報を得ることが出来る)
- Javaは実行時に消えてしまう…
- in/outについては、まだ理解が及ばない
Unity2D
Unityのソースコード
- Unityは基本クローズドソース
- 大手企業なら提供されて読めるのだろうか?
- なので、Android開発でよくやる、プラットフォームが提供しているクラスのソースコードを読んでパクったりちょっといじるのは難しそう
- ただ、ググるとデコンパイルしたソースコードをGithubにあげている御方がいらっしゃる
- https://github.com/MattRix/UnityDecompiled
- READMEを見る限り、Unityの中の人に許可は取ったよ!という感じらしい