NET6新機能 新構造体の最適化
{NET6では、Struct.Directorにいくつかの最適化が施されています。 NET6はStructのためにいくつかの最適化を行っています。{NET6 I. レコード構造
の前バージョンでも利用可能でしたが
record
は、以前のバージョンでは
record
は
class
は参照型ですが
{コード
record
struct
が値型である場合は、構造体である
というように使われます。
record struct Point(int X, int Y);
で
NET6
に基づいてレコードを宣言することもサポートされています。
class
の
record
で新しいオブジェクトを作成するために、== と ! = 演算子をオーバーライドし、いくつかのプロパティを変更することができます。レコード構造体がパラメータ付きコンストラクタを宣言している場合、暗黙のうちにパラメータなしのコンストラクタが生成されます。
コードは以下の通りです。
record class
上記のコードを実行すると、参照コンストラクトが明示的に宣言されていないにもかかわらず、それを初期化するために参照不要のコンストラクトが生成されていることが分かります。
上記のコードの出力は以下の通りです。
record RecordModel(int Id, string Name) record struct
II. 読み出し専用構造体レコード
を使用することができます。
GetHashCode
を使って構造をマークすることもできますし
{コード
しかし
var p1 = new Point(1, 2);
var p2 = p with { X = 2 };
Console.WriteLine(p1);
Console.WriteLine(p2);
Console.WriteLine(new Point());
はrefで変更することはできません。使用方法
Point { X = 1, Y = 2 }
Point { X = 2, Y = 2 }
Point { X = 0, Y = 0 }
1次コンストラクタで宣言された構造体は、init属性を持つことになります。
readonly
このプロパティは次のように宣言されています。
readonly struct record
III. パラメータレスコンストラクタ
record struct
{{コード コードは以下の通りです。
{{コード
readonly struct record
re
adonly record struct Point(int X, int Y).
{{コード
{{コード コードの出力は次のようになります。
internal readonly struct Point : IEquatable { public int X { get; init; } public int Y { get; init; } public Point(int X, int Y) { this.X = X; this.Y = Y; } }
{{コード
{{コード
{{コード
NET6
supports user-defined parameterless constructors, and we can add initialization logic to the parameterless constructor
The code is as follows.
{{コード
Console.WriteLine(new Point1().ToString());
Console.WriteLine(default(Point1).ToString());
Console.WriteLine(Activator.CreateInstance());
struct Point1
{
public int X { get; set; }
public int Y { get; set; }
private int Z { get; set; }
public Point1()
{
X = 1;
Y = 2;
Z = 3;
}
public override string ToString()
{
return $"{X}_{Y}_{Z}";
}
}
Here you need to pay attention to
default
and
new
The difference between
default
is the empty state of the structure and does not perform the unrefined construction, the
new
is executed, and the constructor is also executed when the object is created through reflection.
The output of the code is as follows.
1_2_3
0_0_0
1_2_3
In addition to
record
NET6 also extends the use of with expressions to allow normal structures and anonymous objects to use
with
to modify some of the properties of
The code is as follows.
Console.WriteLine((new Point1() with { X = 2 }).ToString());
Console.WriteLine();
var obj = new
{
X = 1,
Y = 1
};
Console.WriteLine(JsonSerializer.Serialize(obj));
Console.WriteLine(JsonSerializer.Serialize(obj with { X = 3, Y = 3 }));
The output is as follows.
2_2_3
{"X":1, "Y":1}
{"X":3, "Y":3}
with
can only operate on public members, the Z in the above code is private, so it cannot be specified in the with expression. and
record class
record struct does not have a Clone method, because struct does not need its own Clone function.
record struct
Clone member methods are not allowed to be declared, and all records are not allowed to declare Clone members.
This is the end of this article on NET6 struct optimization. For more information about NET6 struct optimization, please search the previous articles or continue to browse the following articles.
{{コード コードは以下の通りです。
{{コード
Console.WriteLine(new Point1().ToString());
Console.WriteLine(default(Point1).ToString());
Console.WriteLine(Activator.CreateInstance());
struct Point1
{
public int X { get; set; }
public int Y { get; set; }
private int Z { get; set; }
public Point1()
{
X = 1;
Y = 2;
Z = 3;
}
public override string ToString()
{
return $"{X}_{Y}_{Z}";
}
}
default
{{コード
{{コード
{{コード
default
{{コード
{{コード
{{コード
関連
-
.netcoreプロジェクトでIStartupFilterを使用するためのチュートリアル
-
NET6新機能 - 暗黙の名前空間参照
-
.NET Coreでオブジェクトプールを使用する
-
ネットのメモリ管理に関する5つの基本
-
swagger uiをasp.net coreに統合する原理
-
NET 6 の今後の新機能 暗黙の名前空間参照
-
ネットパフォーマンスチューニング - ArrayPool 詳細
-
asp.net core3.1 cookieとjwtのハイブリッド認証による多様な認証ソリューションの実現
-
CS0234 名前空間 'Microsoft.AspNet' に型または名前空間名 'Mvc' が存在しない (あなたは
-
ASP.NETのオンライン統計とアプリケーションとセッションを使用した訪問履歴
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
NET 6の新しい設定オブジェクトConfigurationManagerの紹介
-
.NET複数データベース一括データ挿入、更新(SqlServer、MySql、PgSql、Oracleをサポートします。)
-
ASP.NET Core Dependency Injectionフレームワークの活用
-
ASP.NET Core ディペンデンシーインジェクションの詳細
-
ASP.NET CoreでCAPの取引詳細を自動で有効にする
-
ASP.NET学習でよくあるエラーのまとめ
-
ASP.NET Core MVC Dependency Injection ビューとコントローラ
-
ASP.NET Core MVC フィルタ
-
ASP.NET Core Web API チュートリアル プロジェクト構成図
-
ASP.NET Coreで複数のサービス実装クラスをインジェクトする方法