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

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


8
การแทนที่สตริงใน java คล้ายกับเทมเพลตความเร็ว
มีStringกลไกการแทนที่ใน Java หรือไม่ที่ฉันสามารถส่งผ่านวัตถุด้วยข้อความและแทนที่สตริงเมื่อมันเกิดขึ้น ตัวอย่างเช่นข้อความคือ: Hello ${user.name}, Welcome to ${site.name}. วัตถุที่ฉันมีอยู่และ"user" "site"ฉันต้องการแทนที่สตริงที่ระบุภายใน${}ด้วยค่าที่เทียบเท่าจากอ็อบเจ็กต์ สิ่งนี้เหมือนกับที่เราแทนที่วัตถุในเทมเพลตความเร็ว

4
การสร้างอินสแตนซ์ประเภทโดยไม่มีตัวสร้างเริ่มต้นใน C # โดยใช้การสะท้อน
ยกตัวอย่างชั้นเรียนต่อไปนี้: class Sometype { int someValue; public Sometype(int someValue) { this.someValue = someValue; } } จากนั้นฉันต้องการสร้างอินสแตนซ์ประเภทนี้โดยใช้การสะท้อน: Type t = typeof(Sometype); object o = Activator.CreateInstance(t); โดยปกติสิ่งนี้จะใช้งานได้อย่างไรก็ตามเนื่องจากSomeTypeไม่ได้กำหนดคอนสตรัคเตอร์แบบไม่มีพารามิเตอร์การเรียกใช้Activator.CreateInstanceจะทำให้เกิดข้อยกเว้นของประเภทที่MissingMethodExceptionมีข้อความ " ไม่มีตัวสร้างที่ไม่มีพารามิเตอร์กำหนดไว้สำหรับอ็อบเจ็กต์นี้ " มีวิธีอื่นในการสร้างอินสแตนซ์ของประเภทนี้หรือไม่ มันเป็นเรื่องที่แย่มากที่จะเพิ่มตัวสร้างแบบไม่มีพารามิเตอร์ให้กับทุกชั้นเรียนของฉัน

4
วิธีตรวจสอบว่าประเภทของตัวแปรตรงกับประเภทที่เก็บไว้ในตัวแปรหรือไม่
User u = new User(); Type t = typeof(User); u is User -> returns true u is t -> compilation error ฉันจะทดสอบได้อย่างไรว่าตัวแปรบางตัวเป็นบางประเภทด้วยวิธีนี้
97 c#  reflection  types 

15
ฉันจะอ่านคลาสทั้งหมดจากแพ็คเกจ Java ใน classpath ได้อย่างไร
ฉันต้องการอ่านคลาสที่อยู่ในแพ็คเกจ Java ชั้นเรียนเหล่านั้นอยู่ใน classpath ฉันต้องทำงานนี้จากโปรแกรม Java โดยตรง คุณรู้วิธีง่ายๆในการทำหรือไม่? List<Class> classes = readClassesFrom("my.package")
97 java  reflection 

4
สร้างอินสแตนซ์คลาส Object-c ตามชื่อ?
เป็นไปได้ไหมที่จะสร้างอินสแตนซ์ของคลาสตามชื่อ สิ่งที่ต้องการ: NSString* className = @"Car"; id* p = [Magic createClassByName:className]; [p turnOnEngine]; ฉันไม่รู้ว่ามันเป็นไปได้หรือไม่ใน objective-c แต่ดูเหมือนว่าจะเป็น


10
การแมปวัตถุกับพจนานุกรมและในทางกลับกัน
มีวิธีที่รวดเร็วในการแมปวัตถุกับพจนานุกรมหรือไม่และในทางกลับกัน? ตัวอย่าง: IDictionary<string,object> a = new Dictionary<string,object>(); a["Id"]=1; a["Name"]="Ahmad"; // ..... กลายเป็น SomeClass b = new SomeClass(); b.Id=1; b.Name="Ahmad"; // ..........

16
ฉันจะประเมินรหัส C # แบบไดนามิกได้อย่างไร
ฉันสามารถeval("something()");ดำเนินการโค้ดแบบไดนามิกใน JavaScript ได้ มีวิธีให้ฉันทำสิ่งเดียวกันใน C # หรือไม่? ตัวอย่างของสิ่งที่ฉันพยายามทำคือ: ฉันมีตัวแปรจำนวนเต็ม (พูดi) และฉันมีคุณสมบัติหลายอย่างตามชื่อ: "Property1", "Property2", "Property3" ฯลฯ ตอนนี้ฉันต้องการดำเนินการบางอย่าง ใน "ทรัพย์สินฉัน " iทรัพย์สินขึ้นอยู่กับมูลค่าของ นี่เป็นเรื่องง่ายมากด้วย Javascript มีวิธีใดบ้างที่จะทำเช่นนี้กับ C #?

23
วิธีการแปลงวัตถุ Java (bean) เป็นคู่คีย์ - ค่า (และในทางกลับกัน)?
สมมติว่าฉันมีวัตถุ java ที่เรียบง่ายซึ่งมีคุณสมบัติ getXXX และ setXXX บางอย่างเท่านั้น อ็อบเจ็กต์นี้ใช้เพื่อจัดการกับค่าเท่านั้นโดยทั่วไปคือเรกคอร์ดหรือแผนที่ชนิดปลอดภัย (และตัวแสดง) ฉันมักจะต้องแอบแฝงวัตถุนี้เป็นคู่ค่าคีย์ (สตริงหรือประเภทปลอดภัย) หรือแปลงจากคู่ค่าคีย์เป็นวัตถุนี้ นอกเหนือจากการสะท้อนกลับหรือเขียนโค้ดด้วยตนเองเพื่อทำการแปลงนี้วิธีใดที่ดีที่สุดในการบรรลุเป้าหมายนี้ ตัวอย่างอาจส่งวัตถุนี้ผ่าน jms โดยไม่ใช้ประเภท ObjectMessage (หรือแปลงข้อความขาเข้าเป็นชนิดของวัตถุที่ถูกต้อง)


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()); } } ในขณะนี้ฉันคิดว่าวิธีการส่วนตัวยังปลอดภัยเนื่องจากจะทำบางสิ่งเช่นข้างต้นเราต้องรู้ชื่อวิธีการ แต่ถ้าคลาสที่มีเมธอดส่วนตัวที่เขียนโดยคนอื่นเราไม่สามารถมองเห็นได้ …

4
พิจารณาว่าคลาสใช้อินเตอร์เฟสใน Java หรือไม่
ฉันมี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 

6
กำลังโหลด DLL ที่รันไทม์ใน C #
ฉันพยายามหาวิธีที่คุณจะนำเข้าและใช้. dll ที่รันไทม์ภายในแอปพลิเคชัน C # ได้อย่างไร การใช้ 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 …
91 c#  reflection  dll 

6
C # Reflection: จะรับการอ้างอิงคลาสจากสตริงได้อย่างไร?
ฉันต้องการทำสิ่งนี้ใน C # แต่ฉันไม่รู้ว่า: ฉันมีสตริงที่มีชื่อคลาส -eg: FooClassและฉันต้องการเรียกใช้เมธอด (คงที่) ในคลาสนี้: FooClass.MyMethod(); เห็นได้ชัดว่าฉันต้องหาข้อมูลอ้างอิงถึงชั้นเรียนผ่านการไตร่ตรอง แต่อย่างไร?
91 c#  reflection 

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