タグ付けされた質問 「reflection」

リフレクションは、実行時にプログラムの構造や動作を観察および/または変更するプログラムの機能です。リフレクションは、サポートするプログラミング言語に依存しています。このタグを使用する場合は、使用しているプログラミング言語にタグを付けてください。

8
速度テンプレートに似た、Javaでの文字列置換
Stringオブジェクトをテキストで渡すことができるJavaの置換メカニズムはありますか?それは発生時に文字列を置き換えます。 たとえば、テキストは次のとおりです。 Hello ${user.name}, Welcome to ${site.name}. 私が持っているオブジェクトがある"user"と"site"。内部${}で指定された文字列を、オブジェクトからの同等の値で置き換えます。これは、速度テンプレートのオブジェクトを置き換えるのと同じです。

6
GetProperties()は、インターフェース継承階層のすべてのプロパティを返します
次の架空の継承階層を想定します。 public interface IA { int ID { get; set; } } public interface IB : IA { string Name { get; set; } } リフレクションを使用して次の呼び出しを行う: typeof(IB).GetProperties(BindingFlags.Public | BindingFlags.Instance) IB" Name" であるインターフェイスのプロパティのみを生成します。 次のコードで同様のテストを行うと、 public abstract class A { public int ID { get; set; } } public class B : …
96 c#  .net  reflection 


3
スライスを格納するインターフェース上の範囲{}
あなたが受け入れる関数を持っているシナリオを考えるとt interface{}。tスライスであると判断された場合、そのスライスをどのようにrange上書きしますか? func main() { data := []string{"one","two","three"} test(data) moredata := []int{1,2,3} test(data) } func test(t interface{}) { switch reflect.TypeOf(t).Kind() { case reflect.Slice: // how do I iterate here? for _,value := range t { fmt.Println(value) } } } Go Playgroundの例:http : //play.golang.org/p/DNldAlNShB




7
プライベートメソッドは本当に安全ですか?
Javaでは、privateアクセス修飾子はクラスの外からは見えないため、安全であると見なされます。それから、外の世界もその方法について知りません。 しかし、Javaリフレクションはこのルールを破るために使用できると思いました。次のケースを検討してください。 public class ProtectedPrivacy{ private String getInfo(){ return "confidential"; } } 次に、別のクラスから情報を取得します。 public class BreakPrivacy{ public static void main(String[] args) throws Exception { ProtectedPrivacy protectedPrivacy = new ProtectedPrivacy(); Method method = protectedPrivacy.getClass().getDeclaredMethod("getInfo", null); method.setAccessible(true); Object result = method.invoke(protectedPrivacy); System.out.println(result.toString()); } } 上記のようなことをするためにはメソッド名を知らなければならないので、現時点では私はまだプライベートメソッドが安全だと思っていました。しかし、他の誰かが作成したプライベートメソッドを含むクラスの場合、それらの可視性はありません。 しかし、コード行の下なので、私のポイントは無効になります。 Method method[] = new ProtectedPrivacy().getClass().getDeclaredMethods(); これにmethod[]は、上記のことを行うために必要なすべてのものが含まれています。私の質問は、Javaリフレクションを使用してこのようなことを回避する方法はありますか? …

16
C#コードを動的に評価するにはどうすればよいですか?
eval("something()");JavaScriptでコードを動的に実行することができます。C#で同じことをする方法はありますか? 私がやろうとしていることの例は次のとおりです。整数変数(たとえばi)があり、 "Property1"、 "Property2"、 "Property3"などの名前で複数のプロパティがあります。ここで、いくつかの操作を実行したいと思いますの値に応じて「プロパティi」プロパティにi。 これはJavascriptを使うと本当に簡単です。これをC#で行う方法はありますか?

4
クラスがJavaでインターフェースを実装するかどうかを判別する
Classオブジェクトがあります。Classオブジェクトが表すタイプが特定のインターフェイスを実装しているかどうかを確認したいと思います。どうすればこれを達成できるのだろうかと思っていました。 私は次のコードを持っています。基本的には、指定されたパッケージ内のすべてのクラスの配列を取得します。次に、配列を調べて、インターフェイスを実装するClassオブジェクトをマップに追加します。問題は、isInstance()オブジェクトをパラメータとして受け取ることです。インターフェイスをインスタンス化できません。だから私はこれに少し戸惑っています。何か案は? Class[] classes = ClassUtils.getClasses(handlersPackage); for(Class clazz : classes) { if(clazz.isInstance(/*Some object*/)) //Need something in this if statement { retVal.put(clazz.getSimpleName(), clazz); } }
92 java  reflection 

23
Javaオブジェクト(bean)をキーと値のペアに(またはその逆に)変換する方法は?
いくつかのgetXXXおよびsetXXXプロパティのみを持つ非常に単純なJavaオブジェクトがあるとします。このオブジェクトは、値を処理するためにのみ使用されます。基本的には、レコードまたはタイプセーフな(そしてパフォーマンスの高い)マップです。このオブジェクトをキー値ペア(文字列またはタイプセーフ)に変換するか、キー値ペアからこのオブジェクトに変換する必要があることがよくあります。 この変換を行うためにリフレクションまたは手動でコードを書く以外に、これを達成するための最良の方法は何ですか? たとえば、ObjectMessageタイプを使用せずに(または受信メッセージを適切な種類のオブジェクトに変換して)、jmsを介してこのオブジェクトを送信する場合があります。


6
C#で実行時にDLLをロードする
C#アプリケーション内で実行時に.dllをインポートして使用する方法を理解しようとしています。Assembly.LoadFile()を使用して、プログラムにdllをロードさせることができました(ToString()でクラスの名前を取得できるため、この部分は確実に機能しています)が、「出力」を使用できません。コンソールアプリケーション内からのメソッド。.dllをコンパイルしてから、コンソールのプロジェクトに移動しています。CreateInstanceとメソッドを使用できるようになるまでの間に追加の手順はありますか? これは私のDLLのクラスです: namespace DLL { using System; public class Class1 { public void Output(string s) { Console.WriteLine(s); } } } これがDLLをロードしたいアプリケーションです namespace ConsoleApplication1 { using System; using System.Reflection; class Program { static void Main(string[] args) { var DLL = Assembly.LoadFile(@"C:\visual studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\DLL.dll"); foreach(Type type in DLL.GetExportedTypes()) { var c = …
91 c#  reflection  dll 



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.