setAccessibleを見てください - Javaでリフレクションでプライベートメソッドを呼び出す方法です。なぜ.NETはそのような機能を実装していないのですか?.NETにJavaのsetAccessibleと並行しているのはなぜですか?
3
A
答えて
5
Hereは、.NET
using System;
using System.Reflection;
using System.Collections.Generic;
public class MyClass
{
public static void Main()
{
try
{
Console.WriteLine("TestReflect started.");
TestReflect test = new TestReflect();
Console.WriteLine("TestReflect ended.");
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
ConsoleKeyInfo cki;
do
{
Console.WriteLine("Press the 'Q' key to exit.");
cki = Console.ReadKey(true);
} while (cki.Key != ConsoleKey.Q);
}
}
public class TestReflect
{
public TestReflect()
{
this.GetType().GetMethod("PublicMethod").Invoke(this, null);
this.GetType().GetMethod("PrivateMethod", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(this, null);
}
public void PublicMethod()
{
Console.WriteLine("PublicMethod called");
}
private void PrivateMethod()
{
Console.WriteLine("FTW!one1");
}
}
2
に、私は「なぜ」投機質問のビットかもしれないと思うが、あなたはプライベートメソッドをテストする方法を探しているなら、私が思うことをやっての一例ですあなたは、.NET 4.0でこれを簡単に行うことができるようになります:あなたはそれがパブリックメソッドを呼び出すほど単純ではないですが、プライベートメソッドを呼び出すためにリフレクションを使用することができます
http://bugsquash.blogspot.com/2009/05/testing-private-methods-with-c-40.html
4
。私たちは、ユニットテストのために前にこれをやったと使い方を参照するとして、次の記事を使用しています
http://www.emadibrahim.com/2008/07/09/unit-test-private-methods-in-visual-studio/
http://johnhann.blogspot.com/2007/04/unit-testing-private-methods.html
2
それはリフレクションを使用して、民間のものへのアクセスを取得するには、.NETにはかなり可能です。
例えば、クラスバーにはFooというプライベートインスタンスメソッドへのアクセスもは次のようになります取得:
typeof(Bar).GetMethod("Foo",BindingFlags.NonPublic | BindingFlags.Instance);
それはしかし、コード使用して反射が完全に信頼されていることを必要とします。
(セキュリティ要件はV4と異なります)
関連する問題
- 1. .net 4.5は.net 4.0と並行して動作しますか?
- 2. Kotlinに並行性キーワードがないのはなぜですか?
- 3. リアルタイムシステムはなぜ並行ですか?
- 4. アレイの並行修正が遅いのはなぜですか?
- 5. 2つのシーケンシャルコルーチン(非同期関数)が並行して実行されないのはなぜですか?
- 6. .NET 4.5にCallerTypeNameAttributeが存在しないのはなぜですか? .NET 4.5で
- 7. sqlのマージテーブルが並行して並んでいない
- 8. メインを実行していない.NET Consoleアプリケーションが終了するのはなぜですか?
- 9. 数字のスクリプト、3行で簡単に並べ替えると、最後のliが正しく並べ替えられないのはなぜですか?
- 10. ブートストラップ2x2カラムが1x4カラムと並んでいないのはなぜですか?
- 11. なぜsystem.floatが.netに存在しないのですか?
- 12. .NET/JavaとRubyのドメインモデリングの主な違いは何ですか?
- 13. JavaにCopyOnWriteMapが付属していないのはなぜですか?
- 14. .NETアプリケーションを実行できるCASPolはなぜですか?
- 15. Javaを使用してリモートデータベースにアクセスできないのはなぜですか?
- 16. .NET 4で実行している場合、なぜこの行がVerificationExceptionを引き起こしますか?
- 17. なぜSystem.dllのバージョンが.netの.netフレームワーク3.5をターゲットとしているのですか?
- 18. 並行実行に関して、ユーザーレベルスレッド(ULT)とカーネルレベルスレッド(KLT)はどのように異なるのですか?
- 19. Java EE 6アプリケーションの一部として実行しているときにgeotoolsがMathTransformFactoryを投げているのはなぜですか?
- 20. .NETで戻り値の型が構造体として宣言されているのはなぜですか?
- 21. Java - なぜsystem.exit(0)が実行されないのですか?
- 22. .NetにはDebug&Releaseビルドがありますが、Javaにはないのはなぜですか?
- 23. gradleを実行しているときにlwjglがクラスパスから抜けているのはなぜですか?
- 24. 並行GCが(MSDNごとに)ExecutionEngineExceptionを引き起こすことがあるのはなぜですか?
- 25. は、実践でのJava並行処理によると、章11.4.3氏は述べています「ロックストライピング」はConcurrentHashMapの
- 26. Javaでコンパイルエラーが発生しないのはなぜですか?
- 27. Eclipseが私のJavaプログラムの古いバージョンを実行しているのはなぜですか?
- 28. なぜJavaで並列配列を使用するのですか?
- 29. Sharepoint 2010が.Net 3.5に制限されているのはなぜですか?
- 30. ReflectionProperty :: setAccessibleはプロパティを永久にアクセス可能にしますか?
リンクが壊れています。彼らはそれを取り下げる前に、サイトからの有用なビットをコピーしたなら、これは受け入れられた答えは役に立たないといいですね。 – NightOwl888
@ NightOwl888、あなたのためにそれを修正しました。 – Yishai