小ネタ記事。
既存の記事だとコントロールを指定するものが見当たらなかったため。
C#では特定のコントロールに対しても拡張メソッドを定義できる。
あたかも、元々持っているかのように振舞わせることが可能
(既に同名のインスタンスメソッドがある場合はそちらが優先される)
interfaceなど、ありとあらゆるクラスを指定出来るらしい(staticクラスやsealedクラスは拡張できない)
参考Link
拡張メソッドを作成するには?[C#/VB]
interfaceにも拡張メソッドは作成できます。
【C#】拡張メソッドの作り方
LINQが拡張メソッドであることが提示されている。
[C#]拡張メソッドを使って、I/Fの変更無しに扱えるフィールドやサービスを増やす
interfaceでの拡張メソッド使用例です。
TextBoxにcustomMethodを追加
以下の例ではTextBoxのプロパティに対して拡張メソッドを定義することで、新しいメソッドを持たせてみる。
拡張メソッドの最初の引数にthisを付けて対象型を指定すれば良い
ここではthis TextBox textBox,
using System.Windows.Controls;
namespace FFmpegCommandParseTest
{
internal static class TextPropertyExtentions
{
public static List<string> DivideCommand(this TextBox textBox)
{
List<string> divided = new();
var textToAppend = textBox.Text.Trim();
if (!string.IsNullOrEmpty(textToAppend))
{
textToAppend.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
.ToList()
.ForEach(s => divided.Add(s));
//空白文字で分割し、空の要素を除外
}
return divided;
}
}
}
<TextBox Name="CommandTextBox"
FontSize="16"
Height="100" TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Auto"
Loaded="CommandTextBox_Loaded"/>
これを知ってると、特定のコントロールや任意のクラスに対して手軽に拡張機能が追加出来る。単純ながら非常に広い応用性を持っていると言える。
例えば、一つのクラスファイルが1000行以上になった(責務が集中し過ぎた)
ときに、余分な処理を拡張メソッドという形で分割することも可能だろう。まあPartial Classでもいいけど。
visual Studioで
IntelliSense(コード補完)にも出るようになる。
あとがき
DataGridの振舞い制御とか色々出来そう。
最近はWinUI3
に興味持ってるんだけどinstallだけで6GBも占有するのとコード例(アプリ開発例)が少ない。
※小ネタなのでいいねしなくてよいですが、1年間いいね付かない場合はこの記事は削除されます。