คำถามติดแท็ก reflection

Reflection เป็นความสามารถของโปรแกรมในการสังเกตและ / หรือปรับเปลี่ยนโครงสร้างและ / หรือพฤติกรรมของมันที่รันไทม์ การสะท้อนแสงขึ้นอยู่กับภาษาการเขียนโปรแกรมที่สนับสนุน - โปรดติดแท็กภาษาการเขียนโปรแกรมที่ใช้เมื่อใช้แท็กนี้


13
. NET มีค่าใช้จ่ายเท่าใด
ฉันได้ยินอยู่เสมอว่าการสะท้อนที่ไม่ดีนั้นถูกใช้อย่างไร ในขณะที่ฉันมักจะหลีกเลี่ยงการไตร่ตรองและไม่ค่อยพบสถานการณ์ที่เป็นไปไม่ได้ที่จะแก้ปัญหาของฉันหากไม่มีมันฉันก็สงสัยว่า ... สำหรับผู้ที่เคยใช้การไตร่ตรองในแอพพลิเคชั่นคุณได้วัดผลการทำงานที่ได้รับและมันแย่มากจริง ๆ เหรอ?

6
วิธีรับรายการคุณสมบัติพร้อมแอตทริบิวต์ที่กำหนด?
ฉันมีประเภท, และฉันต้องการที่จะได้รับรายชื่อของคุณสมบัติที่สาธารณะที่มีแอตทริบิวต์t MyAttributeคุณลักษณะถูกทำเครื่องหมายด้วยAllowMultiple = falseเช่นนี้: [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)] ปัจจุบันสิ่งที่ฉันมีอยู่นี้ แต่ฉันคิดว่ามีวิธีที่ดีกว่า: foreach (PropertyInfo prop in t.GetProperties()) { object[] attributes = prop.GetCustomAttributes(typeof(MyAttribute), true); if (attributes.Length == 1) { //Property with my custom attribute } } ฉันจะปรับปรุงสิ่งนี้ได้อย่างไร คำขอโทษของฉันหากนี่คือสิ่งที่ซ้ำกันมีเธรดการสะท้อนจำนวนมากออกมาที่นั่น ... ดูเหมือนว่าจะเป็นประเด็นร้อนแรง
210 c#  .net  reflection 

13
รับชื่อคุณสมบัติเป็นสตริง
(ดูวิธีแก้ปัญหาด้านล่างที่ฉันสร้างโดยใช้คำตอบที่ฉันยอมรับ) ฉันพยายามปรับปรุงความสามารถในการบำรุงรักษาของโค้ดบางอย่างที่เกี่ยวกับการสะท้อนกลับ แอปนี้มี. NET Remoting interface ซึ่งเป็นวิธีการที่เรียกว่า Execute สำหรับการเข้าถึงส่วนต่าง ๆ ของแอพซึ่งไม่ได้รวมอยู่ในอินเทอร์เฟซระยะไกลที่เผยแพร่ นี่คือวิธีที่แอปกำหนดคุณสมบัติ (แบบคงที่ในตัวอย่างนี้) ซึ่งหมายถึงให้สามารถเข้าถึงได้ผ่าน Execute: RemoteMgr.ExposeProperty("SomeSecret", typeof(SomeClass), "SomeProperty"); ดังนั้นผู้ใช้ระยะไกลสามารถโทร: string response = remoteObject.Execute("SomeSecret"); และแอพจะใช้การสะท้อนเพื่อค้นหา SomeClass.SomeProperty และส่งคืนค่าเป็นสตริง น่าเสียดายที่ถ้ามีคนเปลี่ยนชื่อ SomeProperty และลืมเปลี่ยน parm ที่ 3 ของ ExposeProperty () มันจะทำลายกลไกนี้ ฉันต้องการเทียบเท่า: SomeClass.SomeProperty.GetTheNameOfThisPropertyAsAString() ใช้เป็น parm ตัวที่ 3 ใน ExposeProperty ดังนั้นเครื่องมือการรีแฟคเตอร์จะดูแลการเปลี่ยนชื่อ มีวิธีทำเช่นนี้หรือไม่? ขอบคุณล่วงหน้า. ตกลงนี่คือสิ่งที่ฉันสร้างขึ้น (ตามคำตอบที่ฉันเลือกและคำถามที่เขาอ้างถึง): // …

13
คุณสามารถใช้การสะท้อนเพื่อค้นหาชื่อของวิธีการดำเนินการในปัจจุบันได้หรือไม่?
เช่นเดียวกับชื่อ says: สามารถสะท้อนให้คุณชื่อของวิธีการดำเนินการปัจจุบัน ฉันมีแนวโน้มที่จะเดาไม่ได้เพราะปัญหาของไฮเซนเบิร์ก คุณจะเรียกวิธีการที่จะบอกวิธีปัจจุบันโดยไม่เปลี่ยนวิธีการปัจจุบันได้อย่างไร แต่ฉันหวังว่าบางคนสามารถพิสูจน์ฉันผิดได้ที่นั่น ปรับปรุง: ส่วนที่ 2: สามารถใช้เพื่อดูโค้ดภายในของคุณสมบัติได้หรือไม่ ตอนที่ 3: การแสดงจะเป็นอย่างไร? ผลลัพธ์สุดท้าย ฉันเรียนรู้เกี่ยวกับ MethodBase.GetCurrentMethod () ฉันได้เรียนรู้ว่าไม่เพียง แต่ฉันสามารถสร้างการติดตามสแต็กฉันสามารถสร้างเฟรมที่แน่นอนที่ฉันต้องการได้หากต้องการ หากต้องการใช้สิ่งนี้ภายในพร็อพเพอร์ตี้ให้ใช้. Substring (4) เพื่อลบ 'set_' หรือ 'get_'
202 .net  reflection 

4
เรียกใช้วิธีการคงที่โดยใช้การสะท้อน
ฉันต้องการที่จะเรียกใช้mainวิธีการซึ่งเป็นแบบคงที่ ฉันได้รับประเภทของวัตถุClassแต่ฉันไม่สามารถสร้างตัวอย่างของคลาสนั้นและยังไม่สามารถเรียกใช้staticเมธอดmainได้
199 java  reflection  static 


9
Reflection: วิธีเรียกใช้เมธอดด้วยพารามิเตอร์
ฉันพยายามเรียกใช้วิธีการผ่านการสะท้อนกับพารามิเตอร์และฉันได้รับ: วัตถุไม่ตรงกับประเภทเป้าหมาย ถ้าฉันเรียกใช้เมธอดที่ไม่มีพารามิเตอร์จะทำงานได้ดี ขึ้นอยู่กับรหัสต่อไปนี้ถ้าฉันเรียกวิธีการTest("TestNoParameters")ทำงานได้ดี อย่างไรก็ตามถ้าฉันโทรTest("Run")ฉันจะได้รับการยกเว้น มีบางอย่างผิดปกติกับรหัสของฉันหรือไม่ จุดประสงค์เริ่มต้นของฉันคือการส่งอาร์เรย์ของวัตถุเช่นpublic void Run(object[] options)แต่สิ่งนี้ไม่ได้ผลและฉันพยายามทำสิ่งที่ง่ายกว่าเช่นสตริงที่ไม่ประสบความสำเร็จ // Assembly1.dll namespace TestAssembly { public class Main { public void Run(string parameters) { // Do something... } public void TestNoParameters() { // Do something... } } } // Executing Assembly.exe public class TestReflection { public void Test(string methodName) { …

7
ตรวจสอบว่า Class Object เป็นคลาสย่อยของ Class Object อื่นใน Java
ฉันกำลังเล่นกับ API การสะท้อนของ Java และพยายามจัดการบางฟิลด์ ตอนนี้ฉันติดอยู่กับการระบุประเภทของเขตข้อมูลของฉัน myField.getType().equals(String.class)สตริงเป็นเรื่องง่ายเพียงแค่ทำ เช่นเดียวกับคลาสอื่นที่ไม่ได้รับ แต่ฉันจะตรวจสอบคลาสที่ได้รับได้อย่างไร เช่นLinkedListเป็น subclass Listของ ฉันไม่สามารถหาใด ๆisSubclassOf(...)หรือextends(...)วิธีการ ฉันจำเป็นต้องเดินผ่านทั้งหมดgetSuperClass()และค้นหา supeclass ของฉันด้วยตัวเองหรือไม่?
197 java  class  reflection 

4
ความแตกต่างระหว่าง getFields และ getDeclaredFields ใน Java reflection คืออะไร
ฉันสับสนเล็กน้อยเกี่ยวกับความแตกต่างระหว่างgetFieldsวิธีการและgetDeclaredFieldsวิธีการใช้การสะท้อน Java ฉันอ่านที่getDeclaredFieldsให้คุณเข้าถึงทุกฟิลด์ของคลาสและ getFieldsคืนค่าฟิลด์สาธารณะเท่านั้น หากเป็นกรณีนี้ทำไมจะไม่คุณก็มักจะใช้getDeclaredFields? ใครบางคนช่วยอธิบายรายละเอียดเกี่ยวกับเรื่องนี้และอธิบายความแตกต่างระหว่างสองวิธีนี้และเมื่อใด / ทำไมคุณต้องการใช้อีกวิธีหนึ่ง
195 java  reflection 

2
เหตุใดการค้นหาตัวเริ่มต้นของประเภทจึงทำให้ NullReferenceException
นี่ทำให้ฉันนิ่งงัน ฉันพยายามเพิ่มประสิทธิภาพการทดสอบบางอย่างสำหรับ Noda Time ซึ่งเรามีการตรวจสอบประเภทเริ่มต้น ฉันคิดว่าฉันพบว่าเป็นชนิดที่มี initializer ชนิด (คอนสตรัคคงที่หรือตัวแปรคงที่กับ initializers) AppDomainก่อนที่จะโหลดทุกอย่างเข้าใหม่ สำหรับความประหลาดใจของฉันการทดสอบเล็ก ๆ น้อย ๆ ของการขว้างปานี้NullReferenceException- แม้ว่าจะไม่มีค่า null ในรหัสของฉัน มันจะโยนข้อยกเว้นเมื่อรวบรวมโดยไม่มีข้อมูลการแก้ปัญหา นี่เป็นโปรแกรมสั้น ๆ แต่สมบูรณ์เพื่อแสดงให้เห็นถึงปัญหา: using System; class Test { static Test() {} static void Main() { var cctor = typeof(Test).TypeInitializer; Console.WriteLine("Got initializer? {0}", cctor != null); } } และหลักฐานการรวบรวมและผลลัพธ์: c:\Users\Jon\Test>csc Test.cs …

5
รับชื่อชุดประกอบ
คลาสยกเว้นของ C # มีคุณสมบัติซอร์สซึ่งถูกตั้งค่าเป็นชื่อของชุดประกอบโดยค่าเริ่มต้น มีวิธีอื่นในการรับสายที่แน่นอนนี้ (โดยไม่แยกสตริงอื่น)? ฉันได้ลองทำสิ่งต่อไปนี้แล้ว: catch(Exception e) { string str = e.Source; //"EPA" - what I want str = System.Reflection.Assembly.GetExecutingAssembly().FullName; //"EPA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" str = typeof(Program).FullName; //"EPA.Program" str = typeof(Program).Assembly.FullName; //"EPA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" str = typeof(Program).Assembly.ToString(); //"EPA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" str = typeof(Program).AssemblyQualifiedName; //"EPA.Program, EPA, Version=1.0.0.0, …

3
BindingFlags.IgnoreCase ไม่ทำงานกับ Type.GetProperty ()?
ลองนึกภาพต่อไปนี้ ประเภท T มี บริษัท สาขา เมื่อรันวิธีการต่อไปนี้มันทำงานได้อย่างสมบูรณ์: Type t = typeof(T); t.GetProperty("Company") สายต่อไปนี้ฉันได้รับเป็นโมฆะ Type t = typeof(T); t.GetProperty("company", BindingFlags.IgnoreCase) ใครมีความคิดบ้าง

12
เครื่องมือในการสร้างสคีมา JSON จากข้อมูล JSON [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน3 ปีที่ผ่านมา ปรับปรุงคำถามนี้ เรามีร่างแบบร่าง json นี้ ฉันต้องการรับตัวอย่างข้อมูล JSON ของฉันและสร้างโครงกระดูกสำหรับ JSON schema ที่ฉันสามารถทำงานซ้ำได้ด้วยตนเองเพิ่มสิ่งต่าง ๆ เช่นคำอธิบายจำเป็น ฯลฯ ซึ่งไม่สามารถอนุมานจากตัวอย่างที่เฉพาะเจาะจง ตัวอย่างเช่นจากอินพุตของฉันexample.json: { "foo": "lorem", "bar": "ipsum" } ฉันจะเรียกใช้เครื่องมือ json_schema_generator ของฉันและจะได้รับ: { "foo": { "type" : "string", "required" : true, "description" : "unknown" }, "bar": { "type" : …


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.