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

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

14
Java Reflection Performance
การสร้างวัตถุโดยใช้การสะท้อนมากกว่าการเรียกตัวสร้างคลาสส่งผลให้เกิดความแตกต่างด้านประสิทธิภาพที่สำคัญหรือไม่?


10
วิธีโหลดคลาส Python แบบไดนามิก
รับสตริงของคลาส Python เช่นmy_package.my_module.MyClassวิธีที่ดีที่สุดในการโหลดมันคืออะไร? ในคำอื่น ๆ ฉันกำลังมองหาเทียบเท่าClass.forName()ใน Java ฟังก์ชั่นใน Python มันต้องทำงานกับ Google App Engine สิ่งนี้จะเป็นฟังก์ชั่นที่ยอมรับ FQN ของคลาสเป็นสตริงและส่งคืนการอ้างอิงไปยังคลาส: my_class = load_class('my_package.my_module.MyClass') my_instance = my_class()

1
ทำไมแอททริบิวต์ isDefined () จึงโอเวอร์โหลดเกินพิกัด
แรงบันดาลใจจากคำถาม SO ชั้น Attribute มีหลาย overloads สำหรับIsDefined ()วิธีการ Covered คือแอททริบิวต์ที่ใช้กับชุดประกอบ, โมดูล, MemberInfo, ParameterInfo MemberInfo โอเวอร์โหลดครอบคลุม PropertyInfo, FieldInfo, EventInfo, MethodInfo, ConstructorInfo ที่ดูแล AttributeTargets ส่วนใหญ่ ยกเว้นหนึ่ง biggy: ไม่มี overload สำหรับ Attribute.IsDefined (Type, Type) เพื่อให้คุณสามารถตรวจสอบว่ามีการกำหนดคุณลักษณะในชั้นเรียน หรือ struct, มอบหมายหรือ enum สำหรับเรื่องที่ ไม่ใช่ว่านี่เป็นปัญหาที่แท้จริง Type.GetCustomAttributes () สามารถแก้ไขได้ แต่ BlahInfo ทุกประเภทก็มีเช่นกัน ฉันสงสัยว่าขาดความสมมาตร ฉันไม่สามารถระบุได้ว่าทำไมสิ่งนี้จึงเป็นปัญหาสำหรับประเภท การคาดเดาปัญหามรดกไม่ได้อธิบายให้ฉันฟัง การมี ValueType ในการผสมอาจเป็นผู้นำ …
165 c#  .net  reflection 

4
ดึงฟิลด์คงที่เท่านั้นที่ประกาศในคลาส Java
ฉันมีชั้นเรียนต่อไปนี้: public class Test { public static int a = 0; public int b = 1; } เป็นไปได้หรือไม่ที่จะใช้การสะท้อนเพื่อรับรายการของฟิลด์คงที่เท่านั้น? Test.class.getDeclaredFields()ฉันรู้ฉันจะได้รับอาร์เรย์ของฟิลด์ทั้งหมดที่มี แต่ดูเหมือนว่าไม่มีวิธีการตรวจสอบว่าFieldอินสแตนซ์เป็นตัวแทนของสนามคงที่หรือไม่
163 java  reflection  static  field 

12
วิธีการทดสอบว่า Type เป็นแบบดั้งเดิมหรือไม่
ฉันมีบล็อกของรหัสที่ทำให้ประเภทเป็นอนุกรมในแท็ก Html Type t = typeof(T); // I pass <T> in as a paramter, where myObj is of type T tagBuilder.Attributes.Add("class", t.Name); foreach (PropertyInfo prop in t.GetProperties()) { object propValue = prop.GetValue(myObj, null); string stringValue = propValue != null ? propValue.ToString() : String.Empty; tagBuilder.Attributes.Add(prop.Name, stringValue); } นี้ทำงานได้ดียกเว้นฉันต้องการให้ทำเช่นนี้เพียงชนิดดั้งเดิมเช่นint, double, boolฯลฯ และประเภทอื่น …

4
invokedynamic คืออะไรและฉันจะใช้ได้อย่างไร
ฉันคอยฟังเกี่ยวกับคุณสมบัติเจ๋ง ๆ ใหม่ ๆ ที่กำลังเพิ่มเข้าไปใน JVM และหนึ่งในฟีเจอร์เจ๋ง ๆ เหล่านั้นก็คือการเรียกใช้ ฉันต้องการจะรู้ว่ามันคืออะไรและมันทำให้การเขียนโปรแกรมไตร่ตรองใน Java ง่ายขึ้นหรือดีขึ้นอย่างไร

4
วิธีการตรวจสอบว่าวัตถุมีวิธีการ / คุณสมบัติบางอย่าง?
ใช้รูปแบบไดนามิกอาจ? คุณสามารถเรียกวิธีการ / คุณสมบัติใด ๆ โดยใช้คำสำคัญแบบไดนามิกใช่ไหม? วิธีการตรวจสอบว่ามีวิธีการก่อนที่จะเรียก myDynamicObject.DoStuff () ตัวอย่างเช่น?

15
ฉันจะดักการเรียกเมธอดใน C # ได้อย่างไร
สำหรับคลาสที่กำหนดฉันต้องการมีฟังก์ชั่นการติดตามเช่นฉันต้องการบันทึกการเรียกใช้เมธอดทุกครั้ง (ลายเซ็นเมธอดและค่าพารามิเตอร์จริง) และทุกเมธอดออก (แค่ลายเซ็นเมธอด) ฉันจะทำสิ่งนี้สำเร็จโดยสมมติว่า: ฉันไม่ต้องการใช้ห้องสมุด AOP ของบุคคลที่สามสำหรับ C # ฉันไม่ต้องการเพิ่มรหัสที่ซ้ำกันไปยังวิธีการทั้งหมดที่ฉันต้องการติดตาม ฉันไม่ต้องการเปลี่ยน API สาธารณะของชั้นเรียน - ผู้ใช้ของชั้นเรียนควรสามารถเรียกใช้วิธีการทั้งหมดได้ในลักษณะเดียวกัน เพื่อให้คำถามที่เป็นรูปธรรมมากขึ้นสมมติว่ามี 3 คลาส: public class Caller { public static void Call() { Traced traced = new Traced(); traced.Method1(); traced.Method2(); } } public class Traced { public void Method1(String name, Int32 value) { } public …
154 c#  reflection  aop 

5
แปลงวัตถุ 'พิมพ์' หลามเป็นสตริง
ฉันสงสัยว่าจะแปลงวัตถุชนิด 'หลาม' เป็นสตริงโดยใช้ความสามารถในการสะท้อนของงูใหญ่ ตัวอย่างเช่นฉันต้องการพิมพ์ประเภทของวัตถุ print "My type is " + type(someObject) # (which obviously doesn't work like this)
152 python  reflection 

13
รับคุณสมบัติและค่าจากวัตถุที่ไม่รู้จัก
จากโลกของ PHP ฉันตัดสินใจเลิก C # ฉันเคยค้นหา แต่ดูเหมือนไม่สามารถหาคำตอบของวิธีการที่เทียบเท่ากับสิ่งนี้ $object = new Object(); $vars = get_class_vars(get_class($object)); foreach($vars as $var) { doSomething($object->$var); } โดยทั่วไปฉันมีรายการวัตถุ วัตถุอาจเป็นหนึ่งในสามประเภทที่แตกต่างกันและจะมีชุดของคุณสมบัติสาธารณะ ฉันต้องการที่จะได้รับรายการคุณสมบัติสำหรับวัตถุวนรอบพวกเขาแล้วเขียนออกไปยังไฟล์ ฉันคิดว่าสิ่งนี้เกี่ยวข้องกับการไตร่ตรองด้วย c # แต่มันใหม่ทั้งหมดสำหรับฉัน ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก.
150 c#  reflection 

5
บรรทัดของโค้ด Python สามารถรู้ระดับการซ้อนของย่อหน้าได้หรือไม่?
จากบางสิ่งเช่นนี้ print(get_indentation_level()) print(get_indentation_level()) print(get_indentation_level()) ฉันต้องการได้รับสิ่งนี้: 1 2 3 รหัสสามารถอ่านตัวเองด้วยวิธีนี้ สิ่งที่ฉันต้องการคือผลลัพธ์จากส่วนที่ซ้อนกันมากขึ้นของรหัสที่จะซ้อนกันมากขึ้น ในทำนองเดียวกับที่ทำให้โค้ดอ่านง่ายขึ้นก็จะทำให้อ่านง่ายขึ้น แน่นอนฉันจะดำเนินการนี้ด้วยตนเองโดยใช้เช่น.format()แต่สิ่งที่ฉันมีในใจเป็นฟังก์ชั่นการพิมพ์ที่กำหนดเองซึ่งจะprint(i*' ' + string)ที่iเป็นระดับเยื้อง นี่จะเป็นวิธีที่รวดเร็วในการสร้างเอาต์พุตที่อ่านได้บนเทอร์มินัลของฉัน มีวิธีที่ดีกว่าในการทำเช่นนี้ซึ่งหลีกเลี่ยงการจัดรูปแบบด้วยตนเองอย่างระมัดระวัง?

7
วิธีรับค่าคุณสมบัติตามชื่อ
มีวิธีการรับค่าคุณสมบัติของวัตถุตามชื่อหรือไม่ เช่นถ้าฉันมี: public class Car : Vehicle { public string Make { get; set; } } และ var car = new Car { Make="Ford" }; ฉันต้องการเขียนวิธีการที่ฉันสามารถส่งผ่านในชื่อคุณสมบัติและมันจะส่งกลับค่าคุณสมบัติ เช่น: public string GetPropertyValue(string propertyName) { return the value of the property; }
147 c#  asp.net  reflection 

13
ที่รันไทม์ค้นหาคลาสทั้งหมดในแอ็พพลิเคชัน Java ที่ขยายคลาสฐาน
ฉันต้องการทำสิ่งนี้: List<Animal> animals = new ArrayList<Animal>(); for( Class c: list_of_all_classes_available_to_my_app() ) if (c is Animal) animals.add( new c() ); ดังนั้นฉันต้องการดูคลาสทั้งหมดในแอปพลิเคชันจักรวาลของฉันและเมื่อฉันพบสิ่งที่สืบทอดมาจาก Animal ฉันต้องการสร้างวัตถุใหม่ของประเภทนั้นและเพิ่มลงในรายการ สิ่งนี้ทำให้ฉันสามารถเพิ่มฟังก์ชันการทำงานโดยไม่ต้องอัปเดตรายการสิ่งต่าง ๆ ฉันสามารถหลีกเลี่ยงสิ่งต่อไปนี้: List<Animal> animals = new ArrayList<Animal>(); animals.add( new Dog() ); animals.add( new Cat() ); animals.add( new Donkey() ); ... ด้วยวิธีการข้างต้นฉันสามารถสร้างคลาสใหม่ที่ขยายขอบเขตสัตว์และมันจะถูกเลือกโดยอัตโนมัติ ปรับปรุง: 10/16/2008 9:00 น. เวลามาตรฐานแปซิฟิก: คำถามนี้ได้สร้างคำตอบที่ดีมากขอบคุณ …

4
อะไรคือความแตกต่างระหว่าง JDK dynamic proxy และ CGLib?
ในกรณีของProxy Design Patternความแตกต่างระหว่างDynamic Proxy ของ JDK กับ API การสร้างรหัสแบบไดนามิกของบุคคลที่สามเช่นCGLibคืออะไร? อะไรคือความแตกต่างระหว่างการใช้ทั้งสองวิธีและเมื่อใดที่ควรจะใช้มากกว่ากัน?

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