تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] عدم الوصول الي الكلاسات الخاصة
#1
السلام عليكم ورحمة الله
عامل مشروع ClassLibrary طبعا ينتج ملف ديل
لو اي حد اخذ ملف الديل هذا وضافه في مشروع سيسطيع الوصول الي ال Class التي بداخله بكل سهولة
اريد الا يستطيع احد الوصول اليها اريدها تظهر لي فقط في مشروعي
وجزاكم الله خيرا
الرد }}}
تم الشكر بواسطة:
#2
الـClasses التي لا تريد أحد أن يراها أستخدم Friend Class بدلاً من Public Class
الرد }}}
تم الشكر بواسطة: 3booody
#3
وكيف اصل الي الكلاسات
الرد }}}
تم الشكر بواسطة:
#4
لو اردت مثلآ عمل خاصية لا احد يمكنه الوصول اليها الا انته اثناء التصريح اسبق بالكلمة Protected
تلاحظ الخاصية تظهر لك فقط داخل الكلاس

كود :
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Test As New MyTest
Test.Text=""'خطأ
    End Sub
End Class
Public Class MyTest
    Protected Property Text() As String
        Get
            Return "A"
        End Get
        Set(ByVal value As String)

        End Set
    End Property

    Public Sub New()
        Me.Text = "B"
    End Sub
End Class
الرد }}}
تم الشكر بواسطة: Aly El-Haddad
#5
Thumbs Up 
(08-12-13, 06:13 PM)ali.alfoly كتب : وكيف اصل الي الكلاسات

من خلال الـPublic Classes في مشروع الـ DLL
يعني أنت لما تستخدم الـPublic Class من المشروع حتى لو كان هذا الـPublic Class تستخدم بداخله دوال من Friend Classes فهذا لا يؤثر في شئ و تبقى الـFriend Classes في الحفظ و الصون

(08-12-13, 06:28 PM)3booody كتب : لو اردت مثلآ عمل خاصية لا احد يمكنه الوصول اليها الا انته اثناء التصريح اسبق بالكلمة Protected
تلاحظ الخاصية تظهر لك فقط داخل الكلاس

كود :
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Test As New MyTest
Test.Text=""'خطأ
    End Sub
End Class
Public Class MyTest
    Protected Property Text() As String
        Get
            Return "A"
        End Get
        Set(ByVal value As String)

        End Set
    End Property

    Public Sub New()
        Me.Text = "B"
    End Sub
End Class

توضيح بسيط بخصوص Protected

عند وضع خاصية Protected في Class فإن هذه الخاصية لا يمكن إستخدامها إلا من هذا الـClass أو الـClasses الورثة يعني مثلاً في مثالك أنت كاتب Class MyTest فا لو أنا جيت كتبت
كود :
Public Class MyTest2
Inherits MyTest
فيمكنني استخدام تلك الخاصية Text من خلال MyTest2

أما لو أردت أن تضع خاصية لا يمكن أن تُستخدم من خارج الـClass الذي هي فيه فتستخدم Private لا Protected
الرد }}}
تم الشكر بواسطة: الشاكي لله
#6
هناك فكرة ...


كما تعلم عندما تريد استخدام دوال المكتبة ، يجب عليك ان تقوم بتعريف Instance للكائن بهذا الشكل

PHP كود :
Dim cls As New ClassLibrary2.Class1() 


تستطيع اعطاء رقم سري الى Sub new لتتم المقارنة ، فاذا كان الرقم السري خطأ

يتم رمي استثناء :-

PHP كود :
Public Class Class1

    
Public Sub New(ByVal Serial As String)
        If (
Serial <> "نص مشفر مثلا للمقارنة"Then
            
Throw New Exception("السيريال خطأ ، لايمكن استخدام المكتبة")
        
End If
    
End Sub

End 
Class 


الان طريقة استخدام المكتبة :-

PHP كود :
Try
            
Dim cls As New ClassLibrary2.Class1("trtor")
        Catch 
ex As Exception
            MsgBox
(ex.Message)
        
End Try 

سيتم الغاء عملية انشاء الكائن وسيدخل البرنامج الى اكواد Catch اذا كان السيريال خطا



تحياتي

















(08-12-13, 07:00 PM)Aly El-Haddad كتب :
(08-12-13, 06:13 PM)ali.alfoly كتب : وكيف اصل الي الكلاسات

من خلال الـPublic Classes في مشروع الـ DLL
يعني أنت لما تستخدم الـPublic Class من المشروع حتى لو كان هذا الـPublic Class تستخدم بداخله دوال من Friend Classes فهذا لا يؤثر في شئ و تبقى الـFriend Classes في الحفظ و الصون

(08-12-13, 06:28 PM)3booody كتب : لو اردت مثلآ عمل خاصية لا احد يمكنه الوصول اليها الا انته اثناء التصريح اسبق بالكلمة Protected
تلاحظ الخاصية تظهر لك فقط داخل الكلاس

كود :
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Test As New MyTest
Test.Text=""'خطأ
    End Sub
End Class
Public Class MyTest
    Protected Property Text() As String
        Get
            Return "A"
        End Get
        Set(ByVal value As String)

        End Set
    End Property

    Public Sub New()
        Me.Text = "B"
    End Sub
End Class

توضيح بسيط بخصوص Protected

عند وضع خاصية Protected في Class فإن هذه الخاصية لا يمكن إستخدامها إلى من هذا الـClass أو الـClasses الورثة يعني مثلاً في مثالك أنت كاتب Class MyTest فا لو أنا جيت كتبت
كود :
Public Class MyTest2
Inherits MyTest
فيمكنني استخدام تلك الخاصية Text من خلال MyTest2

أما لو أردت أن تضع خاصية لا يمكن أن تُستخدم من خارج الـClass الذي هي فيه فتستخدم Private لا Protected
مع احترامي

الطريقة هذي يمكن كسرها بسهولة لو استخدم المبرمج ال System.Reflection.Assembly :-


PHP كود :
Dim asm As System.Reflection.Assembly System.Reflection.Assembly.LoadFile("dllpath")
        
Dim ty As Type asm.GetType("ClassLibrary2.Class1")

        
Dim dynMethod As Reflection.MethodInfo =
            
ty.GetMethod("الاجراء الغير متاح الوصول له"BindingFlags.NonPublic Or BindingFlags.Instance)

        
dynMethod.Invoke(MeNothing














رجاء من الادارة ان تقوم بفصل الردود

مي حالة دي
الرد }}}
تم الشكر بواسطة: Aly El-Haddad , hoob computer
#7
(08-12-13, 07:04 PM)الشاكي لله كتب : هناك فكرة ...


كما تعلم عندما تريد استخدام دوال المكتبة ، يجب عليك ان تقوم بتعريف Instance للكائن بهذا الشكل

PHP كود :
Dim cls As New ClassLibrary2.Class1() 


تستطيع اعطاء رقم سري الى Sub new لتتم المقارنة ، فاذا كان الرقم السري خطأ

يتم رمي استثناء :-

PHP كود :
Public Class Class1

    
Public Sub New(ByVal Serial As String)
        If (
Serial <> "نص مشفر مثلا للمقارنة"Then
            
Throw New Exception("السيريال خطأ ، لايمكن استخدام المكتبة")
        
End If
    
End Sub

End 
Class 


الان طريقة استخدام المكتبة :-

PHP كود :
Try
            
Dim cls As New ClassLibrary2.Class1("trtor")
        Catch 
ex As Exception
            MsgBox
(ex.Message)
        
End Try 

سيتم الغاء عملية انشاء الكائن وسيدخل البرنامج الى اكواد Catch اذا كان السيريال خطا



تحياتي

















(08-12-13, 07:00 PM)Aly El-Haddad كتب :
(08-12-13, 06:13 PM)ali.alfoly كتب : وكيف اصل الي الكلاسات

من خلال الـPublic Classes في مشروع الـ DLL
يعني أنت لما تستخدم الـPublic Class من المشروع حتى لو كان هذا الـPublic Class تستخدم بداخله دوال من Friend Classes فهذا لا يؤثر في شئ و تبقى الـFriend Classes في الحفظ و الصون

(08-12-13, 06:28 PM)3booody كتب : لو اردت مثلآ عمل خاصية لا احد يمكنه الوصول اليها الا انته اثناء التصريح اسبق بالكلمة Protected
تلاحظ الخاصية تظهر لك فقط داخل الكلاس

كود :
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Test As New MyTest
Test.Text=""'خطأ
    End Sub
End Class
Public Class MyTest
    Protected Property Text() As String
        Get
            Return "A"
        End Get
        Set(ByVal value As String)

        End Set
    End Property

    Public Sub New()
        Me.Text = "B"
    End Sub
End Class

توضيح بسيط بخصوص Protected

عند وضع خاصية Protected في Class فإن هذه الخاصية لا يمكن إستخدامها إلى من هذا الـClass أو الـClasses الورثة يعني مثلاً في مثالك أنت كاتب Class MyTest فا لو أنا جيت كتبت
كود :
Public Class MyTest2
Inherits MyTest
فيمكنني استخدام تلك الخاصية Text من خلال MyTest2

أما لو أردت أن تضع خاصية لا يمكن أن تُستخدم من خارج الـClass الذي هي فيه فتستخدم Private لا Protected
مع احترامي

الطريقة هذي يمكن كسرها بسهولة لو استخدم المبرمج ال System.Reflection.Assembly :-


PHP كود :
Dim asm As System.Reflection.Assembly System.Reflection.Assembly.LoadFile("dllpath")
        
Dim ty As Type asm.GetType("ClassLibrary2.Class1")

        
Dim dynMethod As Reflection.MethodInfo =
            
ty.GetMethod("الاجراء الغير متاح الوصول له"BindingFlags.NonPublic Or BindingFlags.Instance)

        
dynMethod.Invoke(MeNothing

أهلاً أخي الشاكي لله
عندما طرحت طريقتي لم أضع في الحسبان أي شئ عن الهندسة العكسية لأنني لو طرحت عنها شئ سأقع في متاهات و تعقيدات ليس لها نهاية

و مع إحترامي أيضاً لك، طريقتك يمكن إختراقها بطريقتين

الأولى: مستخدم المكتبة (غير الأصلي) لو مسح Try و Catch عند إستخدامه لها فسيظهر كود الـClass بأكمله في الـVisual Studio ليريك السطر المكتوب فيه Throw Exception

الثانية: لو وضعنا في الحسبان الإختراق عن طريق الهندسة العكسية فبمنتهى البساطة يمكن جلب الكود السري لإستخدام الـClass عن طريق Reflector
الرد }}}
تم الشكر بواسطة:
#8
وعليكم السلام ورحمة الله وبركاته

أفضل انك تنقل الكلاس ClassLibrar داخل المشروع
يعني لا تستخدم ملف DLL
كذا ما بيكون من المرفقات مع البرنامج
بل سيكون من ضمن EXE
Big Grin
<---------------------------------------------------------------->

الرد }}}
تم الشكر بواسطة:
#9
السلام عليكم ورحمة الله
جزاكم الله خيرا اخواني عاي هذه الافكار وعلي هذا النقاش الماتع
لاكن للاسف لم نصل الي حل نهائي حتي الان

إقتباس :أفضل انك تنقل الكلاس ClassLibrar داخل المشروع

مستحيل مكتبات كتير
الرد }}}
تم الشكر بواسطة:
#10
(08-12-13, 08:25 PM)ali.alfoly كتب : السلام عليكم ورحمة الله
جزاكم الله خيرا اخواني عاي هذه الافكار وعلي هذا النقاش الماتع
لاكن للاسف لم نصل الي حل نهائي حتي الان

إقتباس :أفضل انك تنقل الكلاس ClassLibrar داخل المشروع

مستحيل مكتبات كتير

هل لنا أن توضح المطلوب أكثر؟ Rolleyes
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [VB.NET] مشكلة عدم الوصول Registry النظام MOHAMMED ALZWI 2 419 15-06-23, 09:01 PM
آخر رد: MOHAMMED ALZWI
  كيفية الوصول الى القرص الصلب في الجهاز الخادم ابو محمد محمد محمد 0 401 20-04-23, 03:41 AM
آخر رد: ابو محمد محمد محمد
  جمع المبالغ الخاصة بالعميل كل يوم على حده ابو ايمن شعيب 6 617 14-04-23, 01:01 AM
آخر رد: ابو ايمن شعيب
  [VB.NET] مشكلة في الوصول لــ Registry النظام MOHAMMED ALZWI 1 300 26-03-23, 12:26 PM
آخر رد: sanyor77
  [سؤال] محتاج بعد انهاء المشروع اقوم بتحويله لملف تنفيذي يصعب الوصول للكود والفورم mony.tornado 6 642 08-12-22, 09:22 AM
آخر رد: مصمم هاوي
  [سؤال] كود استخراج العلامات الخاصة حسن الجلب 6 882 10-08-22, 04:06 AM
آخر رد: سعود
  لايمكن للعملية الوصول للملف لأنه قيد الإستخدام بعملية أخرى جيولوجي مبتدئ 7 841 07-08-22, 06:31 AM
آخر رد: جيولوجي مبتدئ
  [VB.NET] السلام عليكم عندي استفسار بخصوص الكلاسات AhmedRamadan 3 1,685 18-09-21, 08:02 PM
آخر رد: العطر الرايق
  جمل الحفظ الخاصة بال commandbuilder لا تعمل الوضع المنفصل hany nabil3 1 922 17-05-21, 10:46 PM
آخر رد: عبد العزيز البسكري
  اريد طريقة للدوران علي ملفات الرسورسز الخاصة بالبرنامج أبو عبدالله الحلواني 3 1,563 16-05-21, 06:02 PM
آخر رد: أبو عبدالله الحلواني

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم