में इस refactor करने के लिए मैं तरीकों कि इन दोनों की तरह लग रही का एक समूह है है। तरीकों के बीच बहुत कम परिवर्तन के साथ मुझे लगता है कि ऐसा करने का एक बेहतर तरीका होना चाहिए, लेकिन मैं किसी के बारे में नहीं सोच सकता। मैं वीएस 2005 का उपयोग कर रहा हूं।यह संभव एक भी विधि
6
A
उत्तर
7
लगभग 3 तरीके कैसे हैं?
public void SourceInfo_Get()
{
SendGet(pFBlock.SourceInfo);
}
public void SourceAvailable_Get()
{
SendGet(pFBlock.SourceAvailable);
}
private void SendGet(Object obj) {
MethodInfo mi = obj.GetType().GetMethod("SendGet");
if (mi != null)
{
ParameterInfo[] piArr = mi.GetParameters();
if (piArr.Length == 0)
{
mi.Invoke(obj, new object[0]);
}
}
}
यहां विचार एक सहायक विधि जोड़ने के लिए है जिसे आप पैरामीटर पास कर सकते हैं। फिर आप अपने कोड को भारी रूप से छोटा करने के लिए अपने अन्य तरीकों से सहायक विधि का उपयोग कर सकते हैं।
0
आप इस
private void Source_Get(Object source)
{
MethodInfo mi = source.GetType().GetMethod("SendGet");
if (mi != null)
{
ParameterInfo[] piArr = mi.GetParameters();
if (piArr.Length == 0)
{
mi.Invoke(source, new object[0]);
}
}
}
public void SourceInfo_Get()
{
Source_Get(pFBlock.SourceInfo);
}
public void SourceAvailable_Get()
{
Source_Get(pFBlock.SourceAvailable)
}
0
public void SourceAvailable_Get()
{
CallMethod(pFBlock.SourceAvailable);
}
private void CallMethod(object source, String methodName = "SendGet")
{
MethodInfo mi = source.GetType().GetMethod(methodName);
if (mi != null)
{
if (mi.GetParameters().Length == 0)
{
mi.Invoke(source, new object[0]);
}
}
}
या हम गतिशील का उपयोग की तरह नकली कोड कुछ refactor सकता है ...
public void CallSendGet(object obj)
{
obj.AsDynamic().SendGet();
}
+0
AsDynamic - उस विधि में कौन सा नेमस्पेस स्थित है? – Pedro
0
public void Source_Get(string memberName)
{
object member = pFBlock.GetMember(memberName);
MethodInfo mi = member.GetType().GetMethod("SendGet");
if (mi != null)
{
ParameterInfo[] piArr = mi.GetParameters();
if (piArr.Length == 0)
{
mi.Invoke(member, new object[0]);
}
}
}
कभी कभी अलग कार्यों कोड अधिक पठनीय हैं। आपको जितना संभव हो सके अपने कार्यों को मर्ज नहीं करना चाहिए।
0
इसे आजमाएं। टाइप नहीं किया गया।
private void MasterGet(PFBlock pFBlock, string propertyName)
{
Type t = pFBlock.GetType();
// Cycle through the properties.
foreach (PropertyInfo p in t.GetProperties())
{
if(p.Name == propertyName)
{
MethodInfo mi = p.GetType().GetMethod("SendGet");
if (mi != null)
{
ParameterInfo[] piArr = mi.GetParameters();
if (piArr.Length == 0)
{
mi.Invoke(p, new object[0]);
}
}
}
}
}
संबंधित मुद्दे
- 1. जावा ओओ: क्या यह भी संभव है?
- 2. यह संभव एक Parallel.ForEach
- 3. जावा: प्रक्रिया बंद होने पर विधि को कैसे कॉल करें (क्या यह भी संभव है?)
- 4. यह संभव एक प्रति दुकान आधार
- 5. डीबग सी # डीएल? क्या यह भी संभव है?
- 6. क्या यह विस्तार विधि रीफैक्टर करना संभव है?
- 7. यह संभव SAFEARRAY
- 8. एक बार विधि निष्पादित करना संभव है?
- 9. Linq - 'कोई भी' विधि
- 10. क्या यह एक लंबी प्रारंभिक विधि है?
- 11. कैसे एक आगंतुक (यह भी एक प्रॉक्सी के पीछे अगर)
- 12. यह संभव समाप्त या एक फिल्टर
- 13. क्या यह एक निजी वर्ग संभव है?
- 14. यह संभव समय
- 15. यह == .NET उदाहरण विधि के अंदर शून्य - यह क्यों संभव है?
- 16. ब्रॉडकास्ट रिसीवर से एक गतिविधि विधि को कॉल करें। क्या यह संभव है?
- 17. जावा प्रश्न: क्या यह एक विधि है?
- 18. यह विधि एक materialized क्वेरी परिणाम
- 19. यह संभव VS2010
- 20. यह संभव परिभाषित नामस्थान
- 21. यह संभव jQuery
- 22. यह संभव अजगर
- 23. यह संभव डालने क्वेरी
- 24. गिटहब पर एक निजी गिट भंडार कैसे स्थापित करें? क्या यह भी संभव है?
- 25. बाइंड एंड्रॉइड कस्टम व्यू को एक विशिष्ट लेआउट xml (क्या यह भी संभव है?)
- 26. क्या यह संकलक को बताना संभव है कि एक विधि हमेशा अपवाद
- 27. टीटी पर एक टेम्पलेटेड क्लास के अंदर टी पर टेम्पलेटेड विधि: क्या यह संभव/सही
- 28. सुपरक्लास :: विधि या यह-> विधि
- 29. क्या एक गैर एसिंक विधि में एक प्रतीक्षा योग्य विधि को कॉल करना संभव है?
- 30. यह संभव एक गुमनाम प्रकार में एक सशर्त क्षेत्र है
विधि सार्वजनिक होने लगती है। क्यों न सिर्फ इसे बुलाओ? प्रतिबिंब का उपयोग करने का क्या मतलब है? – tvanfosson
यह कोड स्वतः उत्पन्न होता है और मुझे नहीं पता कि विधि मौजूद है या नहीं, यदि यह कोड जनरेशन समय पर पैरामीटर लेता है। तो मैं यह सुनिश्चित करने के लिए प्रतिबिंब का उपयोग कर रहा हूं कि यह मौजूद है और कॉल करने से पहले किसी भी पैरामीटर की आवश्यकता नहीं है। – scott
क्या आप 4.0 सुविधाओं का उपयोग कर सकते हैं? यदि हां, तो गतिशील कीवर्ड के उपयोग के लिए मेरा उत्तर देखें। यह कोड पीढ़ी के साथ ठीक काम करता है और शुद्ध प्रतिबिंब की तुलना में बेहतर प्रदर्शन प्रदान करता है। – Jaster