FC2ブログ

ブログに書く内容とか

  • 仕事(開発)時の覚書的なメモ
  • メインは、C#、WPF、時々Xamarin
  • ご利用は自己責任でよろしく

Record型についてのメモ書き(参)

Record型についてのメモ書き(壱)
Record型についてのメモ書き(弐)

コンポーネント プロパティに分解できます。

なんのこと?とサンプルを見て実装してみる。
var human1 = new Human("Taro", "Tawamure", 15);
var (FirstName, LastName, Age) = human1;
え。これでビルドエラーにならないの?という見た目である。上記の場合は、FirstName, LastName, Ageというローカル変数に、human1のプロパティ値がそれぞれ設定されるようだ。まあ、確かに分解だけども…。なお、ローカル変数以外にも設定できるけど、その際varは不要になる。
Person person1 = new("Tawamure", "Days") { Age = 25 };
(person1.FirstName, person1.LastName, person1.Age) = human1;
C#9.0の仕様を理解していないと、サッパリ妖精が来そうだ。なお、位置指定レコード以外で、この書き方をしようと思うと、Deconstructメソッドを時まで実装する必要がある。VS2019でコンパイルエラーが出て、修正ヒントにお任せすると、そのメソッドが現れる。
internal void Deconstruct(out object firstName, out object lastName, out uint age) {
firstName = this.FirstName;
lastName = this.LastName;
age = this.Age;
}
位置指定レコードは、これをコンパイラが自動で実装してくれているから、エラーにならないのか。続きを読む
スポンサーサイト



当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: .NET5 | コメント: 0 | トラックバック: 0

Record型についてのメモ書き(弐)

Record型についてのメモ書き(壱)の続き。

・レコードには、自動的に生成される一貫した文字列表現があります。

var human2 = new Human("Taro", "Tawamure", 15);
Console.WriteLine(human2);//Human {FirstName=Taro, LastName=Tawamure, Age=15}
なんかJson形式に近いな。Recordを継承してみよう。
/// <summary>HiHuman レコード</summary>
public record HiHuman(string FirstName, string LastName,
uint Age, string Height) : Human(FirstName, LastName, Age);
var hiHuman1 = new HiHuman("Taro", "Tawamure", 15, "165");
Console.WriteLine(hiHuman1);
//{HiHuman { FirstName = Taro, LastName = Tawamure, Age = 15, Height = 165 }}
むむ。横並びか。では、継承Recordを変えてみてと
/// <summary>HiHuman レコード(改版)</summary>
public record HiHuman(string FirstName, string LastName, uint Age, params string[] Hobbys) :
Human(FirstName, LastName, Age);
var hiHuman1 = new HiHuman("Taro", "Tawamure", 15, "釣り","読書","ゲーム");
Console.WriteLine(hiHuman1);
//{HiHuman { FirstName = Taro, LastName = Tawamure, Age = 15, Hobbys = System.String[] }}
配列はサポート対象外かぁ。

レコードによって、コピーの構築がサポートされます。with句によるサポート

コピー機能も良い感じです。
var human1 = new Human("Taro", "Tawamure", 15);
var human2 = human1 with {};
Console.WriteLine(human1 == human2);//True
var human3 = human1 with {Age=35};
Console.WriteLine(human1 == human3);//False
Clone、あるいはDeepCopy系のメソッドを自前で実装しなくていいのかぁ。らくちんですな。 続きを読む
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: .NET5 | コメント: 0 | トラックバック: 0

Record型についてのメモ書き(壱)

C#9.0から、Record型というものが導入された。
C#9.0の新機能 - Recordの種類
"種類"ということはいくつかあるの?と思ってしまった。まあ上の記事を読んでみた。以下抜粋。

・レコード型を使用すると、変更できない参照型を .NET で簡単に作成できます。
・プロパティがすべて等しい場合、2 つのレコードは等しいと見なされます。
・レコードによって、コピーの構築がサポートされます。with句によるサポート
・レコードには、自動的に生成される一貫した文字列表現があります。
・"位置指定レコード" と呼ばれる簡潔な形式があります。
・コンポーネント プロパティに分解できます。

続きを読む
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: .NET5 | コメント: 0 | トラックバック: 0

.NET5 でWPFプロジェクト作るか

仕事で使うにはまだ先の話だけど、.NET5がLaunchされた。早速、ダウンロードだ。
.NET Download
そしてインストール。数GBくらい行くのかな?と思ったら、そんなこともないようだ。.NET5そのものはそこまで大きくない感じ。.
.NET5をVisual Studio19で使うには、バージョンを16.8以降にする必要があるらしいので、更新
VS2019バージョン
そして、.NET5が追加されている。
NET5インストール
おお。昔(VS2003やVS2005の頃)に比べて、なんどスムーズなことかw。
早速プロジェクトを作ろうか。
NET5プロジェクト
.NET。最新のものがまさかの無印。シンプルだなぁ。
ターゲットを.NET5にチェンジ。
NET5に変更
流れ的には、.NET Coreの次世代になるのか。ただ、これでビルドすると、警告が出る。
Microsoft.NET.Sdk.WindowsDesktop SDKを使用する必要はなくなりました。
この警告を消すには、プロジェクトファイルを直接編集する必要があるようだ。
プロジェクト上で右クリックして。「アンロード」する。そして直接編集でファイルを開く。
NET5_csprojの中身
うわ。ないこれすっげーシンプル。このSdkの記述をいじればいいのか。
NET5_csprojの中身2
再ロードしてビルドすると、警告なしになった。
.NET5にいたり、C#のバージョンは9になり、ほかの技術もいっぱい出ている。使いこなすには、いろいろな知識を吸収し、技術を覚える必要がある。今はまだ仕事につかえないので、単に「覚える」ことを目的にしても、あまり続かないだろうし、何か作ったほうが習得の早道になるかな。
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: .NET5 | コメント: 0 | トラックバック: 0

GridSplitter と Expander

Gridパネルのブロック間の高さや幅を調整するためにGridSplitterがあるのだけど、これとExpanderの相性がよろしくない。
最初
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto"/>
<RowDefinition />
</Grid.RowDefinitions>
<Expander x:Name="ExpanderOne" Grid.Row="0" IsExpanded="True">
<GroupBox Background="Lavender"
/>
</Expander>
<GridSplitter Grid.Row="1" Height="5" Background="DarkGray"
HorizontalAlignment="Stretch" />
<GroupBox Grid.Row="2" Background="LightGreen"
/>
</Grid>
20200916_1.png
Expanderをたたむとこんな感じ。
20200916_2.png
むむぅ。ついてこない。まあ、あたりまえ。RowDefinitionにStyle設定する。

続きを読む
当サイトは基本をすっ飛ばしてます。基本文法等は、@ITをどうぞ
カテゴリー: WPF4 | コメント: 0 | トラックバック: 0

サイドバー背後固定表示サンプル

当ブログに書かれたソースコードは流用自由です。

バグ、スペルミス等はありうる事です。

ご利用の際は自己責任でお願いしますm(_ _)m