न तो जावा में और न ही सी # में आप एक अमूर्त वर्ग का उदाहरण बना सकते हैं। आपको हमेशा एक ठोस वर्ग बनाने की आवश्यकता होगी जो अमूर्त वर्ग से प्राप्त हो। जावा अज्ञात वर्गों का उपयोग करके कक्षा को नाम दिए बिना ऐसा करने देता है। सी # आपको वह विकल्प नहीं देता है।
जब आप के साथ एक अमूर्त वर्ग का उपयोग
जावा में आम तौर पर
(एक स्थानापन्न के रूप एक प्रतिनिधि को दिखाने के लिए। मैं वी.एस. के लिए उपयोग यहाँ, तो यह संकलन नहीं कर सकते हैं नहीं है, लेकिन यह विचार है संपादित) एक एकल सार विधि (एसएएम) जिसे आप वास्तव में प्राप्त करने की कोशिश कर रहे हैं वह कुछ कोड को पैरामीटर के रूप में पास करना है। मान लें कि संग्रहों का उपयोग करके आपको कक्षा के नाम के आधार पर ऑब्जेक्ट्स की एक सरणी सॉर्ट करने की आवश्यकता है।प्रकार (संग्रह, तुलनाकारी) (मैं जानता हूँ कि तुलनाकारी एक इंटरफेस है, लेकिन यह एक ही विचार है) अतिरिक्त टाइपिंग से बचने के लिए एक अनाम वर्ग का उपयोग करना, आप की तरह
Comparator<Object> comparator = new Comparator<Object>{
@Override
public int compare(Object o1, Objecto2) {
return o1.getClass().getSimpleName().compareTo(o2.getClass().getSimpleName()));
}//I'm not checking for null for simplicity
}
Collections.sort(list, comparator)
कुछ सी # 2.0 में और आप से परे लिख सकते हैं Comparison<T>
प्रतिनिधि का उपयोग कर बहुत कुछ कर सकते हैं। एक प्रतिनिधि को फ़ंक्शन ऑब्जेक्ट के रूप में या जावा शब्दों में, एक विधि के साथ एक वर्ग के रूप में सोचा जा सकता है। आपको कक्षा बनाने की भी आवश्यकता नहीं है, बल्कि कीवर्ड प्रतिनिधि का उपयोग करके केवल एक विधि है।
Comparison<Object> comparison = delegate(Object o1, Object o2)
{
return o1.class.Name.CompareTo(o2.class.Name);
};
list.sort(comparison);
सी # 3.0 में और तुम भी कम कोड lambdas और प्रकार निष्कर्ष का उपयोग कर लिख सकते हैं परे:
list.sort((o1, o2) => o1.class.Name.CompareTo(o2.class.Name))
वैसे भी, अगर तुम ग # करने के लिए कोड के रूप जावा माइग्रेट कर रहे हैं आप के प्रतिनिधियों के बारे में पढ़ा जाना चाहिए था ... कई मामलों में आप अज्ञात कक्षाओं के बजाय प्रतिनिधियों का उपयोग करेंगे। आपके मामले में, आप DoSmth() के लिए एक विधि शून्य का उपयोग कर रहे हैं। एक्शन नामक एक प्रतिनिधि है जो काफी समान बात है, कोई पैरामीटर नहीं है और कोई वापसी नहीं है।
स्रोत
2010-08-09 19:27:04
वर्तमान में आपका प्रश्न * दूर * बहुत अस्पष्ट है। विशेष रूप से, आपने शीर्षक में और टैग में अमूर्त कक्षाओं का उल्लेख किया है, लेकिन पाठ के शरीर में नहीं। यदि आपके पास जावा कोड का एक विशेष टुकड़ा दिमाग में है, तो कृपया इसे पोस्ट करें। –
उन्होंने "Abstact" नाम की एक कक्षा का उल्लेख किया। प्रासंगिक हो सकता है। –
नहीं, कक्षा सार सार के बराबर है :) – jitm