سؤال

أواجه مشكلة مع ، كما قلت ، تحديد الملكية المنشأة.دعونا نقول لدي الدرجة التي تمثل الصفقة.في صفي لدي الملكية التي تمثل فئة أخرى, مثل هذا:

Public Class PersonRecord

    _myPerson = new Person()

    Public Property MyPerson as Person
    Get
        _myPerson = Person.GetAppropriatePerson(Me.PersonID)

        return _myPerson
    End Get

    Set
        _myPerson = value
    End Set
    End Property

لذا يكون أساسا المنشأة الذي يحتوي على مرشح أن يحصل الشخص المناسب.المشكلة هي أنه عندما كنت ترغب في تعيين شخص معلومات من خلال الخاصية, VB يبدو أن تجاهل هذا وقد فعلت ذلك, مثل هذا:

Me.myPersonRecord.Person.Name = "Some Name"

ولكن عندما وضعت ساعة على هذا ، بعد تحديد الملكية ، القيمة لا تتغير.أنا في حيرة من هذا السلوك.هل هناك شيء أفعله خطأ ؟ وذلك بفضل!

هل كانت مفيدة؟

المحلول

في كل مرة كنت تفعل الحصول على .MyPerson, وظيفة Person.GetAppropriatePerson يحصل تسمى.

أنا لا أعرف تنفيذ تلك الوظيفة ، ولكن أعتقد أن ذلك يعود شخص جديد كائن في كل مرة أن يطلق عليه.

يمكنك تغيير اسم شخص واحد على سبيل المثال.في المرة القادمة يمكنك الاتصال .MyPerson, شخص آخر على سبيل المثال عادت.

اعتمادا على كيفية هذا هو المفترض أن تعمل, هل يمكن أن تفعل بعض الأشياء على سبيل المثال:

  • الاتصال GetAppropriatePerson في منشئ (إذا personid هو معروف في ذلك الوقت).تعيين قيمة الإرجاع إلى _myPerson, و جعل MyPerson خاصية للقراءة فقط.
  • أو تهيئة _myPerson إلى null, ثم في MyPerson جالبة لها if _myPerson == null Then _myPerson = GetAppropriatePerson etc.

نصائح أخرى

أنا لا أعرف إذا كان ن نسخ لصق خطأ, ولكن يبدو أن الكتابة _myPerson كل الوقت في الحصول على جزء من العقار.التي سوف أكثر من المرجح أن يسبب "بعض اسم" للحصول على الكتابة :-)

تحرير هل هيئة, codeape يقول نفس الشيء ثانية قبل لي :-)

نمط مشترك من أجل كسول initialisation من الخصائص مثل هذا هو أن تفعل شيئا مثل التالية ، والذي يتحقق إذا كان الكائن هو null قبل الكتابة.

Public Property MyPerson as Person
Get
    If _myPerson Is Nothing Then
        _myPerson = Person.GetAppropriatePerson(Me.PersonID)
    End If
    return _myPerson
End Get

سيكون لديك لتغيير الخاص بك _myPerson initialisation أن يكون مستقيم dim _myPerson as Person, بدلا من dim _myPerson as New Person() أيضا

ويجب أن يحصل تغيير من قبل هذا السطر: _myPerson = Person.GetAppropriatePerson (Me.PersonID)

وخطوة من خلالكم كود ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top