(सी #, वीएस -2008) एक कार्यक्रम में मैं काम कर रहा हूं, मेरे पास बहुत सारी ऑब्जेक्ट्स हैं जिनके पास सभी आईडी हैं और आईसीओपरपेबल लागू करें ताकि विभिन्न ऑब्जेक्ट्स की सूची आईडी द्वारा आसानी से खोजी जा सके। जब से मैं प्रतिलिपि करने/चिपकाने कोड नफरत है, मैंने सोचा कि मैं एक आधार वर्ग के लिए नीचे सार चाहते कार्यक्षमता की कि बिट, इसलिए जैसे:एक सार बेस क्लास IComparable कैसे बनाएँ जो दो अलग विरासत कक्षाओं की तुलना नहीं करता है?
using System;
namespace MyProg.Logic
{
abstract class IDObject : IComparable<IDObject>
{
private int miID;
public int ID
{
get { return miID; }
set { miID = value; }
}
public IDObject(int ID)
{
miID = ID;
}
#region IComparable<IDObject> Members
int IComparable<IDObject>.CompareTo(IDObject other)
{
return miID.CompareTo(other.miID);
}
#endregion
}
}
दोष यह है कि मैं करने के लिए देख रहे हैं कि दो अलग-अलग वर्गों है कि प्रत्येक यह वारिस होगा है .CompareTo() और मैं सीधे यह लागू करने की उम्मीद कर रहा था कि आईडीओब्जेक्ट से प्राप्त प्रत्येक वर्ग केवल सटीक उसी वर्ग के अन्य लोगों के लिए तुलनात्मक है। तो मुझे लगता है कि कैसे करना है यह पता लगाने की उम्मीद कर रही थी और इस
using System;
namespace MyProg.Logic
{
abstract class IDObject : IComparable<T> where T : IDObject
{
private int miID;
public int ID
{
get { return miID; }
set { miID = value; }
}
public IDObject(int ID)
{
miID = ID;
}
#region IComparable<T> Members
int IComparable<T>.CompareTo(T other)
{
return miID.CompareTo(other.miID);
}
#endregion
}
}
के साथ आया था लेकिन उस की
यह देखते हुए, मैंने "प्रतिबन्ध गैर सामान्य घोषणाओं पर अनुमति नहीं है" एक संकलन त्रुटि देता है मुझे यकीन है कि ऐसा कुछ करने का एक तरीका है ताकि प्रत्येक वर्ग केवल उसी वर्ग के अन्य उदाहरणों के बराबर हो, लेकिन मैं वाक्यविन्यास को परेशान नहीं कर सकता।
+1। अच्छी बात। मैंने आईडी मुद्दे से बाहर रहते हुए पैटर्न दिखाने के लिए अपना जवाब अपडेट कर दिया है। –
आईडी एक SQLite डीबी इंटीजर प्राथमिक कुंजी कॉलम से आती है - इसलिए वे SQLite द्वारा किसी ऑब्जेक्ट प्रकार के बीच अद्वितीय होने की गारंटी देते हैं, लेकिन विभिन्न प्रकार की दो वस्तुएं अनुमानित रूप से ओवरलैप हो सकती हैं, इसलिए आईसीओपरपेबल को केवल उसी वर्ग के सदस्यों को सीमित करना चाहते हैं। – Drogo