سؤال

هل هناك benifit لاستخدام:

private var _someProp:String;

public function set someProp(value:String):void
{
    _someProp = value;
}
public function get someProp():String
{
    return _someProp;
}

على عكس استخدام فقط:

public var someProp:String;

أدرك أن استخدام getter/setter يمكن أن يكون مفيدًا عندما تحتاج إلى مزيد من المعالجة أو الحاجة إلى إخطار متى يتم تغيير العقار مثل:

public function set someProp(value:String):void
{
    _someProp = value;
    _somePropChanged = true;
    doSomethingElse();
}

ولكن إذا لم تكن بحاجة إلى هذا ، فهل هناك أي سبب لاستخدام getter/setter فقط باستخدام VAR عام؟

شكرًا!!

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

المحلول

اعتمادًا على لغتك ، يجب أن تفضل Getter/Setter في المقدمة لأنه لا يمكنك تقديمها لاحقًا (أنا أنظر إليك ، Java) إذا اتضح أنك في حاجة إليها.

نصائح أخرى

هذا يعتمد حقًا قليلاً على اللغة/الإطار/مجموعة الأدوات التي تستخدمها -

ومع ذلك ، غالبًا ما تكون هناك فوائد عند استخدام getters والمستقبين المتعلقة بالإصدار وتوافق API. يمكن أن يكون هذا سببًا مفيدًا للغاية لاستخدامها ، كل ذلك بمفرده.

هذا لا يمكن الإجابة عليه حقًا دون معرفة اللغة. يكلف Getters and Setters أكثر في معظم اللغات ، لكنهم يشترون المرونة في الطريق. في بعض اللغات ، لا يمكنك تغيير الجمهور إلى getter/setter دون تغيير الرمز في المتصلين لأن استخدام بناء الجملة. لكن هذه ليست مشكلة في C#، وهو ما أكتب فيه في الغالب.

يتيح لك getters و setters القيام بالتحقق من صحة المعلمة. يتيحون لك تأخير إنشاء الأشياء حتى المرجع الأول. لديهم الكثير من المزايا ، وأنا أستخدمها كلما احتجت إلى إحدى تلك المزايا من البداية.

لكني أستخدم getters والمستقبين فقط عندما أحتاجهم على الفور ، أو عندما أكون متأكدًا تمامًا من أنني سأحتاج إلى المرونة. وإلا فإنني أنظر إليهم على أنهم ينفخ.

كملاحظة جانبية ، يمكنك البدء مع VAR عام وإذا لزم الأمر قم بتحويله إلى getter / setter لاحقًا في الكود .. اعتمادًا على اللغة التي تستخدمها.

إذا كانت الممتلكات الخاصة بك غبية تمامًا ، ولم يكن لها أي آثار جانبية على بقية الفصل - فعندئذٍ تعرضه بكل الوسائل كحقل عام.

إنه في كثير من الحالات خصائصك إرادة لديك آثار جانبية ، لذلك تحتاج إلى التحكم في كيفية ضبطها والوصول إليها.

كمثال تافهة ، ماذا يحدث إذا لم يتم ضبط متغيرك العام على شيء في مُنشرك؟ هل أنت بخير مع هذا يتم إرجاعه على أنه فارغ؟ أو هل ترغب في ضبط هذا المتغير على شيء بدلاً من العودة الفارغ؟ هذا مثال بسيط حيث يكون getter مخصص يستحق العناء.

يمنحك Getters and Setters أيضًا مزيدًا من التحكم في القيم التي يمكن تعيين المتغير عليها.

bool setAge(int age){
   bol retVal = true;

   if(age <= 0)
       retVal = false;

   return retVal;
}

بدون Setter ، يمكن ضبط القيمة على الصفر ويمكن أن تحدث أشياء سيئة.

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