前提・実現したいこと
C#のプロパティについてですが、
プロパティを非静的に定義した場合
それらをインスタンス化することで
そのプロパティの値を取得することができると思います。
そこでこれらのプロパティをインスタンスに左右されない形で取得する時、
インスタンス無しでプロパティ(もちろん値以外)を
クラス名(非インスタンス).プロパティ名
のように使用したいんですが何か方法はありますでしょうか?
例えばnameof演算子を使用する時、
下記のように使用できるのですが、
C#
1 public class FreeClass 2 { 3 public string FreeProperty { get; set; } 4 } 5 6 public class UserClass 7 { 8 public void UseNameof() 9 { 10 string name = nameof(FreeClass.FreeProperty); 11 } 12 }
本来できないはずの使い方
クラス名(非インスタンス).プロパティ名
の形で引数で使用することができます。
このようにプロパティの値を使用するわけでは無ければ、
何か引数に制限や制約を付けたりすることで
クラス名(非インスタンス).プロパティ名
の形を引数で使用できるメソッドを作成したいのですが、
どのように実装すればよろしいでしょうか?
このようなサイトでの質問もまだ慣れておらず、情報不足ありましたら
ご指摘ください。
宜しくお願い致します。
実現したいこと
・下記のようなメソッドを用意し、呼び出す側はこのメソッドの引数を
クラス名(非インスタンス).プロパティ名でしか使用できないようにしたい
C#
1 public class FreeManagerClass 2 { 3 public static void FromPropertyMethod(/* クラス名(非インスタンス).プロパティ名で */) 4 { 5 6 //プロパティの情報を用いて処理 7 } 8 } 9 10 public class UserClass 11 { 12 public void UseFromPropertyMethod() 13 { 14 FreeManagerClass.FromPropertyMethod(/* クラス名(非インスタンス).プロパティ名で */) 15 } 16 }
※プロパティ名を取得したいわけではありません。
インスタンスからPropertyInfoを取得できるのは存じておりますが、
メソッドを使う側ではnameofの引数のように簡潔に記述できるようにしたい
PropertyInfoを利用するのはもちろん大丈夫ですが、
仮に使用する場合、
それをユーザーサイドから実装しなくてもよく
なおかつユーザーがそのメソッドを使用する場合
クラス名(非インスタンス).プロパティ名
の形にしたいというのが今回の質問になります。
仮にPropertyInfoを使用する場合の避けたい例
C#
1 public class FreeClass 2 { 3 public string FreeProperty { get; set; } 4 } 5 6 public class FreeManagerClass 7 { 8 public static void FromPropertyMethod(PropertyInfo propertyInfo) 9 { 10 //propertyInfoを用いて処理 11 } 12 } 13 14 public class UserClass 15 { 16 public void UseFromPropertyMethod() 17 { 18 PropertyInfo propertyInfo //何らかの方法でユーザーから取得してもらう 19 FreeManagerClass.FromPropertyMethod(propertyInfo) 20 } 21 } 22 23
仮にPropertyInfoを使用する場合の理想例
C#
1 public class FreeClass 2 { 3 public string FreeProperty { get; set; } 4 } 5 6 public class FreeManagerClass 7 { 8 public static void FromPropertyMethod(/* クラス名(非インスタンス).プロパティ名で */) 9 { 10 PropertyInfo propertyInfo ///クラス名(非インスタンス).プロパティ名でPropertyInfoを取得する 11 //プロパティの情報を用いて処理 12 } 13 } 14 15 public class UserClass 16 { 17 public void UseFromPropertyMethod() 18 { 19 FreeManagerClass.FromPropertyMethod(FreeClass.FreeProperty/* クラス名(非インスタンス).プロパティ名で */) 20 } 21 } 22 23
補足情報(FW/ツールのバージョンなど)
・OS バージョン Windows10
・nameof演算子の仕組みなどがわかればかなり
知りたいことに近い感じになります。
回答4件
あなたの回答
tips
プレビュー