سؤال

بعد قراءة الكثير من الردود هذا الموضوع, أرى أن العديد من أولئك الذين يكرهون ذلك الاستشهاد المحتملة لسوء استخدام كلمات رئيسية جديدة.سؤالي هو: أي نوع من الإساءة ؟ كيف يمكن أن يكون هذا أساء بشدة لجعل الناس يكرهون بشدة ؟ هل هو مجرد عن والصفويه?أو كان هناك شرك أنني لست ترى ؟

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

المحلول

ويرى البعض أنها أداة من شأنها أن يساء استخدامها. مثل "الخيار الصارم معطلة" و "على خطأ استئناف التالي" في VB اللغات التي "نقية" مثل C # و Java لم يكن لديه.

وقال

والعديد الشيء نفسه عن الكلمة "فار"، ولكن لا أرى أن يكون سوء المعاملة، وبمجرد أن أصبح مفهوما أنه ليس نفس VB في "البديل"

ويمكن أن يساء استخدامها وفي الأماكن التي المطورين كسول لا يريد نوع التحقق على الطبقات ومجرد محاولة الصيد المكالمات الحيوية بدلا من كتابة "إذا بلاه بلاه هو ...".

وأنا شخصيا أشعر أنها يمكن أن تستخدم بشكل صحيح في حالات مثل هذا الأخيرة السؤال الذي أجبت.

وأعتقد أن تلك حقا فهم انها القوة هي تلك بكثافة إلى لغات .NET الحيوية.

نصائح أخرى

وأعتقد أن الكثير من الاشمئزاز أن الناس يعبرون عن هذه الميزة يتلخص "هذه هي ميزة لغة سيئة لأنها سوف تسمح للمطورين سيئة لكتابة رمز سيئة." إذا كنت تفكر في ذلك، من خلال هذا المنطق <م> جميع ميزات اللغة سيئة.

وعندما تصل الى كتلة من التعليمات البرمجية VB أن بعض عبقرية تمت مسبوقة مع On Error Resume Next، انها ليست VB أن ألعن. ربما ينبغي لي أن أفترض. ولكن في تجربتي شخص عازم على وضع بنس واحد في مربع فتيل سوف تجد وسيلة. حتى لو كنت إفراغ جيوبه، وانه سوف أزياء له البنسات الخاصة.

ولي، وأنا أتطلع إلى وسيلة أكثر فائدة من تشغيل المتوافق بين C # و بايثون. أنا كتابة التعليمات البرمجية المزيد والمزيد من أن يفعل ذلك. الكلمة dynamic لا يمكن أن تأتي في وقت قريب بما فيه الكفاية لهذه الحالة استخدام معينة، لأن الطريقة الحالية لفعل ذلك يجعلني أشعر وكأنني أكاديمي السوفيتية في 1950s من الذي يسافرون إلى الغرب لعقد مؤتمر: هناك كمية هائلة من القواعد والأوراق قبل أن أحصل على الرحيل، وأنا متأكد من شخص ما على وشك أن يراقبني طوال الوقت أنا هناك، ومعظم ما أنا التقط بينما أنا هناك سوف تتخذ بعيدا عني على الحدود عندما أعود .

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

public dynamic Foo(dynamic other) {
  dynamic clone = other.Clone();
  clone.AssignData(this.Data);
  return clone ;
}

بدلا من:

public T Foo<T>(T other) where T: ICloneable, IAssignData{
    T clone = (T)other.Clone();
    clone.AssignData(this.Data);
    return clone;
}

أول واحد ، أي ثابت نوع المعلومات ، لا وقت الترجمة التدقيق ، ليس الذاتي توثيق أي نوع الاستدلال لذلك سوف يضطر الناس إلى استخدام دينامية الإشارة في النداء موقع لتخزين النتيجة ، مما يؤدي إلى مزيد من النوع الخسارة ، وجميع هذه اللوالب أسفل.

أنا بالفعل بدأت الخوف ديناميكية.

تحرير:زوال الخطر (تفو!) ...وديناميكية لم أسيء بعد كل شيء, لا حاجة إلى أسفل التصويت لي بعد 3 سنوات :)

وفي شرك حقيقي؟ نقص حاد في الوثائق. وجود بنية التطبيق بالكامل في ذهن الشخص (أو الأشخاص) الذي كتب عليه. على الأقل مع قوامها الكتابة، يمكنك الذهاب لرؤية ما يفعله الكائن عبر تعريف فئتها. مع دينامية الكتابة، يجب أن نستنتج معنى من انها تستخدم، في أحسن الأحوال. في أسوأ الأحوال، لديك أي فكرة ما هو كائن. انها مثل البرمجة كل شيء في جافا سكريبت. ACK!

وعندما يدرك الناس أنهم لا يحصلون على التحسس جيدة مع dynamic، وأنها سوف يعود مرة أخرى عن كونها dynamic-سعيدة لdynamic ومتى والضرورة، وvar-في-الكل في أوقات أخرى.

وأغراض dynamic ما يلي: التوافقية مع اللغات ومنصات حيوية مثل COM / C ++ وDLR / و IronPython / آيرن روبي. فضلا عن تحول C # نفسها إلى IronSmalltalkWithBraces مع كل IDynamicObject تنفيذ.

وسيتم كان أوقات جيدة من قبل الجميع. (إلا إذا كنت في حاجة للحفاظ على كود شخص آخر كتب).

وهو نوع من مثل مناقشة كاميرات العامة، من أنها يمكن وسوف يساء استخدامها هذا ولكن هناك فوائد لجعلهم كذلك.

وليس هناك سبب لماذا لا يمكن أن تحريم الكلمة "حيوية" في المبدأ التوجيهي الترميز الخاص بك إذا كنت لا حاجة لهم. إذا ما هي المشكلة؟ أعني، إذا كنت تريد أن تفعل أشياء مجنونة مع الكلمة "حيوية" والتظاهر C # هو بعض عم متحولة جافا سكريبت، أن بلدي ضيف. فقط نأخذ هذه التجارب من بلدي مصدر برنامج. ؛)

وFUD. قد يكون أفضل شيء منذ شرائح الخبز، ولكن كل تجربة لقد كان مع VB، جافا سكريبت، وما إلى ذلك، يجلب لي قشعريرة أن نعرف أن C # سيكون الربط الحيوي. وأنا أعلم أنني سوف تكون قادرة على ننظر في الأمر بعقلانية في المستقبل القريب، ونرى كيف جيدة هذه الميزة الجديدة ستكون لتمكين التوافقية مع اللغات الديناميكية. لكنه سيستغرق بعض الوقت. أنا بشر، حسنا؟ : -)

وأنا لا أرى سببا لماذا الطريقة الحالية لاستدعاء أساليب بشكل دينامي معيبة:

ويستغرق ثلاثة خطوط للقيام بذلك، أو يمكنك إضافة طريقة التمديد على System.Object للقيام بذلك نيابة عنك:

class Program
{
    static void Main(string[] args)
    {
        var foo = new Foo();            
        Console.WriteLine(foo.Invoke("Hello","Jonathan"));
    }        
}

static class DynamicDispatchHelper
{
    static public object Invoke(this object ot, string methodName, params object[] args)
    {
        var t = ot.GetType();
        var m = t.GetMethod(methodName);
        return m.Invoke(ot, args);
    }
}

class Foo
{
    public string Hello(string name)
    {
        return ("Hello World, " + name);
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top