फिलहाल मैं vb.net जो डेटाबेस entrys बनाने/लाने के लिए इस्तेमाल किया जा सकता में मॉडल का एक प्रकार बनाने के लिए कोशिश कर रहा हूँ "ओवरराइड" करने के लिए।विधि बच्चे कक्षाओं में साझा सदस्य
मैं एक साझा समारोह के साथ एक मुख्य वर्ग मॉडल बनाया डेटासेट लाने के लिए, उदाहरण के लिए Model.find()। अब मैं कक्षाएं बनाना चाहता हूं जो मुख्य मॉडल-कक्षा का उत्तराधिकारी है, उदा। उपयोगकर्ताओं के लिए एक अलग: UserModel.find() => "उपयोगकर्ताओं से चुनें"।
मुझे अब जो चाहिए वह कक्षा को बताने का एक तरीका ढूंढना है जिसकी तालिका का उपयोग करना चाहिए। मैंने एक अमूर्त स्ट्रिंग "टेबल" के बारे में सोचा जो कि प्रत्येक "बाल-मॉडल" में स्थिर है, लेकिन यह कैसे लागू किया जा सकता है क्योंकि साझा सदस्यों को ओवरराइड करना संभव नहीं है?
अग्रिम धन्यवाद!
संपादित: शायद यह यह थोड़ा स्पष्ट मैं क्या मतलब है कर देगा:
Public Class Model
Public Shared _controller As Controller
Public Shared table As String
Protected Shared tableFields As String()
Shared reader As Npgsql.NpgsqlDataReader
Public Shared Function find()
Dim a As ArrayList = New ArrayList
'Test if the tablefields are already known to the class, if not, get them
If tableFields Is Nothing Then
getTableFields()
End If
Dim query As String = "SELECT " + String.Join(", ", tableFields) + " FROM " + table
reader = _controller.executeReader(query)
While reader.Read
o = New Model
Dim v As New Hashtable
For Each field In tableFields
v(field) = reader(field)
Next
o.values = v
a.Add(o)
End While
reader.Close()
Return DirectCast(a.ToArray(GetType(Model)), Model())
End Function
Public values As Hashtable
Public Sub New()
End Sub
End Class
इसलिए मैं चाहता हूँ जो सभी डेटाबेस प्रविष्टियों पाता है और वापस अपने स्वयं के प्रकार के उदाहरण की एक सरणी देता है एक साझा विधि, जैसे आदर्श()। यही कारण है कि मैं खोज-विधि साझा करना चाहता था और एक उदाहरण से बंधे नहीं था।
यही मैंने पहले किया था, समस्या यह है कि मुझे साझा विधि में तालिका का नाम चाहिए और सार्वजनिक साझा फ़ंक्शन को अतिसंवेदनशील/mustoverride के रूप में घोषित नहीं किया जा सकता है। या मैंने आपके कोड को गलत समझा? – stex
GetTableName फ़ंक्शन साझा नहीं किया जाता है - यह एक "सामान्य" उदाहरण विधि है, जिसे उप-वर्गों द्वारा ओवरराइड किया जाना चाहिए। प्रत्येक उप-वर्ग जो इस विधि को ओवरराइड करता है, एक निजी साझा चर (या यदि संभव हो तो कक्षा-स्तर स्थिरांक) देता है। कक्षा 1 का प्रत्येक उदाहरण उसी तालिका नाम को वापस कर देगा, इस तथ्य के बावजूद कि getableName एक उदाहरण विधि है और साझा विधि नहीं है। विचार यह है कि उप-वर्गों में ओवरराइडिंग के लाभों को ध्यान में रखते हुए, ट्रिगर होने पर साझा विधि के रूप में एक इंस्टेंस विधि कार्य करना (समान मूल्य/संदर्भ लौटाएं, चाहे कोई भी उदाहरण विधि लागू न हो)। –
हाँ, मैं समझता हूं। लेकिन मैं कक्षा 1 का उदाहरण नहीं बनाना चाहता हूं, मैं कक्षा 1 को किसी ऑब्जेक्ट के निर्माण के बिना टेबल नाम के बारे में जानना चाहता हूं। – stex