मुझे नहीं लगता कि मैं अपने आप को बहुत अच्छी तरह से समझाने में सक्षम होने जा रहा हूं, इसलिए क्षमा करें अगर इसका कोई मतलब नहीं है।

नीचे दिए गए उदाहरण में दो कार्य हैं जो कुछ गणना करते हैं जो ठीक काम करते हैं:

Sub Example()

    Dim mValue = Multiply(2, 2)
    Dim dValue = Divide(2, 2)

End Sub

Function Multiply(ByVal value1 As Double, ByVal value2 As Double) As Double
    Return value1 * value2
End Function

Function Divide(ByVal value1 As Double, ByVal value2 As Double) As Double
    Return value1 / value2
End Function

मैं जो करना चाहता हूं वह नीचे जैसा कुछ है (हालांकि यह काम नहीं करता है लेकिन उम्मीद है कि यह दर्शाता है कि मैं क्या करने की कोशिश कर रहा हूं)। मैं एक वर्ग के साथ पैरामीटर साझा करना चाहता हूं और फिर एक ऐसी संपत्ति का चयन करना चाहता हूं जो एक मान लौटाए, उदाहरण के लिए DataGridView1.Item(1, 1).Size के समान। एक संपत्ति के अंदर एक संपत्ति की तरह, लेकिन मैंने उसे खोजा और इससे कोई अच्छा परिणाम नहीं मिला।

Sub example2()

    Dim mValue = Values(2, 2).Multiply()
    Dim dValue = Values(2, 2).Divide()

End Sub

Public Class Values

    Public Shared _Value1, _Value2 As Integer

    Public Sub New(ByVal Value1 As Double, ByVal Value2 As Double)

        _Value1 = Value1
        _Value2 = Value2

    End Sub

    Public Shared ReadOnly Property Multiply() As Double

        Get
            Return _Value1 * _Value2
        End Get

    End Property

    Public Shared ReadOnly Property Divide() As Double

        Get
            Return _Value1 / _Value2
        End Get

    End Property

End Class

मुझे लगता है कि मैं जो करने की कोशिश कर रहा हूं वह संभव है, मुझे लगता है कि मुझे कुछ छोटा याद आ रहा है। कोई मदद या दिशा बहुत अच्छी होगी!

0
Jarron 3 फरवरी 2021, 04:41

2 जवाब

सबसे बढ़िया उत्तर

आपको यह तय करना होगा कि आप Shared सदस्यों या इंस्टेंस सदस्यों का उपयोग करने जा रहे हैं। आपके पास एक कंस्ट्रक्टर है जो Shared नहीं है, इसका मतलब है कि आपको एक इंस्टेंस बनाने की आवश्यकता है, जो आप New कीवर्ड के साथ करते हैं। यदि आप एक उदाहरण बनाते हैं तो आपको उस उदाहरण तक पहुंचने के लिए इंस्टेंस सदस्यों की आवश्यकता होती है:

Public Class Values

    Private value1 As Integer
    Private value2 As Integer

    Public Sub New(value1 As Integer, value2 As Integer)
        Me.value1 = value1
        Me.value2 = value2
    End Sub

    Public Function Multiply() As Integer
        Return value1 * value2
    End Function

    Public Function Divide() As Double
        Return value1 / value2
    End Function

End Class
Sub Example()
    Dim values = New Values(2, 2)
    Dim product = values.Multiply()
    Dim quotient = values.Divide()
End Sub

विकल्प सभी Shared सदस्यों का उपयोग करना है और एक उदाहरण बिल्कुल नहीं बनाना है। डेटा Shared गुणों के माध्यम से और Shared विधियों के माध्यम से बाहर जाता है:

Public Class Values

    Public Shared Property Value1 As Integer
    Public Shared Property Value2 As Integer

    Public Shared Function Multiply() As Integer
        Return Value1 * Value2
    End Function

    Public Shared Function Divide() As Double
        Return Value1 / Value2
    End Function

End Class
Sub Example()
    Values.Value1 = 2
    Values.Value2 = 2

    Dim product = Values.Multiply()
    Dim quotient = Values.Divide()
End Sub

पहले मामले में, आप एक Values इंस्टेंस बनाएंगे जहां आप इसका उपयोग करना चाहते हैं और कोई अन्य कोड जिसने एक अलग इंस्टेंस बनाया है, उस पर कोई प्रभाव नहीं पड़ेगा। दूसरे मामले में, क्योंकि वर्ग के लिए गुणों का केवल एक सेट है, आप उन्हें एक स्थान पर सेट कर सकते हैं और फिर उन्हें दूसरे स्थान पर किसी अन्य स्थान पर सेट कर सकते हैं, फिर पहले स्थान पर एक विधि को कॉल करें और परिणाम की अपेक्षा करें संपत्ति मूल्यों के पहले सेट का उपयोग। फ़ील्ड के केवल एक सेट के साथ, विधियाँ हमेशा उन्हें सौंपे गए अंतिम मानों का उपयोग करेंगी, चाहे वह कोड में कहीं भी हो।

यह भी ध्यान देने योग्य है कि, यदि आप सभी Shared सदस्यों के साथ एक वर्ग को परिभाषित करने के बारे में सोच रहे हैं, तो आपको शायद इसके बजाय एक मॉड्यूल को परिभाषित करना चाहिए। मॉड्यूल को पर्दे के पीछे की कक्षाओं के रूप में संकलित किया जाता है और वे स्वाभाविक रूप से आपको एक उदाहरण बनाने से रोकते हैं, इसलिए मॉड्यूल सदस्य Shared वर्ग के सदस्यों की तरह व्यवहार करते हैं। अंतर यह है कि आपको मॉड्यूल के सदस्यों को मॉड्यूल के नाम से अर्हता प्राप्त करने की आवश्यकता नहीं है, जहां आपको Shared वर्ग के सदस्यों को अर्हता प्राप्त करने की आवश्यकता है। कुछ लोग इसे पसंद नहीं करते हैं और गलत सोचते हैं कि यह OOP के नियमों को तोड़ता है। आप अभी भी मॉड्यूल सदस्यों को अर्हता प्राप्त कर सकते हैं यदि आप चाहते हैं लेकिन कक्षाएं आपको मजबूर करती हैं।

यदि आप एक-लाइनर चाहते हैं तो आप इसे इंस्टेंस सदस्यों और Shared सदस्यों दोनों के साथ कर सकते हैं, लेकिन वे थोड़े अलग दिखेंगे। यदि आप इंस्टेंस सदस्यों का उपयोग कर रहे हैं तो आपको एक इंस्टेंस की आवश्यकता है, इसलिए आपको एक कन्स्ट्रक्टर का आह्वान करना होगा। हालांकि उस वस्तु को इधर-उधर रखने की कोई आवश्यकता नहीं है। आप इसका उपयोग कर सकते हैं और यदि आप चाहें तो इसे फेंक सकते हैं, उदा।

Dim product = New Values(2, 2).Multiply()

यदि आप एक ही नंबर पर कई ऑपरेशन कर रहे हैं, तो यह थोड़ा बेकार है, क्योंकि आप कई समान उदाहरण बना रहे होंगे, उदा।

Dim product = New Values(2, 2).Multiply()
Dim quotient = New Values(2, 2).Divide()

यदि आप Shared सदस्यों का उपयोग कर रहे हैं, तो आपको मूल्यों को पारित करने की अनुमति देने के तरीकों को अधिभारित करना होगा या नहीं:

Public Class Values

    Public Shared Property Value1 As Integer
    Public Shared Property Value2 As Integer

    Public Overloads Shared Function Multiply() As Integer
        Return Value1 * Value2
    End Function

    Public Overloads Shared Function Multiply(value1 As Integer, value2 As Integer) As Integer
        Values.Value1 = value1
        Values.Value2 = value2

        Return Multiply()
    End Function

    Public Overloads Shared Function Divide() As Double
        Return Value1 / Value2
    End Function

    Public Overloads Shared Function Divide(value1 As Integer, value2 As Integer) As Double
        Values.Value1 = value1
        Values.Value2 = value2

        Return Divide()
    End Function

End Class

जब आप किसी विधि को कॉल करते हैं या मौजूदा मानों का उपयोग करते हैं, तो आप नए मानों में पास कर सकते हैं, उदा।

Dim product = Values.Multiply(2, 2)
Dim quotient = Values.Divide()
1
jmcilhinney 3 फरवरी 2021, 05:56

अगर मुझसे कुछ छूट गया है तो कृपया सुधारें, यहाँ मैं क्लास लाइब्रेरी बना रहा हूँ

Namespace calulation

    Public Class Operations

        Private i_v1 As Integer
        Private i_v2 As Integer

        Private obj_mul As Multiply
        Private d_value As Double
        Public ReadOnly Property Multiply As Double
            Get
                obj_mul = New Multiply(i_v1, i_v2)
                d_value = obj_mul.GetValues
                Return d_value
            End Get
        End Property

        Private obj_divide As Divide
        Public ReadOnly Property Divide As Double
            Get
                obj_divide = New Divide(i_v1, i_v2)
                d_value = obj_divide.GetValues
                Return d_value
            End Get
        End Property

        Public Sub New(ByVal v1 As Integer, ByVal v2 As Integer)


            i_v1 = v1
            i_v2 = v2



        End Sub
    End Class

    Public Class Multiply


        Private Shared s_value1 As Integer
        Private Shared s_value2 As Integer
        Public Sub New(ByVal v1 As Integer, ByVal v2 As Integer)

            s_value1 = v1
            s_value2 = v2
        End Sub
        Public Function GetValues() As Double
            Return s_value1 * s_value2
        End Function
    End Class

    Public Class Divide
        Private Shared s_value1 As Integer
        Private Shared s_value2 As Integer

        Public Sub New(ByVal v1 As Integer, ByVal v2 As Integer)

            s_value1 = v1
            s_value2 = v2
        End Sub
        Public Function GetValues() As Double
            Try
                Return s_value1 / s_value2
            Catch ex As Exception
                Throw ex
            End Try

        End Function
    End Class

End Namespace

अब उस लाइब्रेरी का संदर्भ अपने विंडोज़ फॉर्म प्रोजेक्ट में डालें

Imports calculation.calulation


Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

        Try
            Dim obj As Double = New Operations(2, 3).Multiply

            Dim obj2 As Double = New Operations(2, 3).Divide



            MsgBox(obj.ToString)
            MsgBox(obj2.ToString)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try




    End Sub


0
Yogesh 3 फरवरी 2021, 08:18