সি # (.নেট) ডিজাইনের ত্রুটিগুলি [বন্ধ]


84

সি # বা সাধারণভাবে নেট নেট ফ্রেমওয়ার্কের কয়েকটি বৃহত্তম ডিজাইনের ত্রুটিগুলি কী কী?

উদাহরণ: কোনও অ-শনীয় স্ট্রিং টাইপ নেই এবং একটি আইডিটাআডার থেকে মান আনার সময় আপনাকে ডিবিএনল পরীক্ষা করতে হবে।


এই ডিজাইনের ত্রুটিগুলি কোন অর্থে?
— জুলিয়েট

IDataReader এর সাহায্যে আপনি ম্যানুয়ালি পরীক্ষা করার চেয়ে ISDBNull ব্যবহার করতে পারেন
— মার্ক গ্র্যাভেল

9
সিল করা ক্লাস সম্পর্কে কথা বলার জন্য কিউ জোন স্কিট;)
— জনক

4
এটি একটি এক্সটেনশন পদ্ধতি সঙ্গে IDataReader ঠিক করতে বেশ সহজ: দেখুন weblogs.asp.net/skillet/archive/2008/06/18/... ।
— রবার্ট রসনি

@ লেগারডালেক - আমি যদি এই মন্তব্যটি +1 করতাম তবে পারতাম; ভাল মনে আছে
— মার্ক গ্রাভেল

উত্তর:


39

আমি এই পোস্টটির সাথে দৃ agree়ভাবে সম্মতি জানাই (যারা টোস্ট্রিংয়ের অভাবে পু-পোয় করছে তাদের জন্য, আপনার শ্রেণীর জন্য একটি কাস্টম ফর্ম্যাট সরবরাহ করার জন্য একটি ডিবাগার বৈশিষ্ট্য রয়েছে)।

উপরের তালিকার শীর্ষে, আমি নিম্নলিখিত যুক্তিসঙ্গত অনুরোধগুলি যুক্ত করব:

  1. ননযোগ্য মান প্রকারের পরিপূরক হিসাবে অযোগ্য
  2. স্ট্রাক্টের খালি কনস্ট্রাক্টরকে ওভাররাইড করার অনুমতি দিন,
  3. জেনেরিক ধরণের সীমাবদ্ধতাগুলিকে সিল করা ক্লাস নির্দিষ্ট করার অনুমতি দিন,
  4. আমি এখানে অন্য একটি পোস্টারের সাথে সম্মত হয়েছি যে সীমাবদ্ধতা হিসাবে ব্যবহার করার সময় নির্বিচারে নির্মাণকারী স্বাক্ষরগুলির অনুরোধ করেছে ie কোথায় T : new(string), বা কোথায়T : new(string, int)
  5. আমি খালি ইভেন্ট তালিকাগুলির জন্য এবং সমবর্তী সেটিং উভয়ই ঘটনা স্থিরকরণ সম্পর্কে এখানে অন্য একটি পোস্টারের সাথে একমত হই (যদিও পরবর্তীটি জটিল)
  6. অপারেটরগুলি এক্সটেনশন পদ্ধতি হিসাবে সংজ্ঞায়িত করা উচিত, এবং ক্লাসের স্থির পদ্ধতি হিসাবে নয় (বা কমপক্ষে কেবল স্থির পদ্ধতি হিসাবে নয়),
  7. ইন্টারফেসের জন্য স্থির বৈশিষ্ট্য এবং পদ্ধতিগুলিকে অনুমতি দিন (জাভাতে এটি রয়েছে, তবে সি # নেই),
  8. অবজেক্ট ইনিশিয়ালাইজারগুলিতে ইভেন্ট সূচনার অনুমতি দিন (কেবলমাত্র ক্ষেত্র এবং বৈশিষ্ট্য বর্তমানে অনুমোদিত)
  9. কোনও অবজেক্ট তৈরি করার সময় কেন "অবজেক্ট ইনিশিয়ালাইজার" সিনট্যাক্সটি ব্যবহারযোগ্য? কেন এটি যে কোনও সময় উপলব্ধ করা হয় না।var e = new Foo(); e { Bar = baz };
  10. চতুর্ভুজীয় গণনার আচরণ ঠিক করুন ,
  11. সমস্ত সংগ্রহের পুনরাবৃত্তির জন্য অপরিবর্তনীয় স্ন্যাপশট থাকতে হবে (উদাঃ সংগ্রহকে পরিবর্তন করে পুনরুক্তিকারীর অকার্যকর হওয়া উচিত নয়),
  12. টিউপসগুলি যুক্ত করা সহজ, তবে " Either<T>" এর মতো দক্ষ বদ্ধ বীজগণিতের ধরণটি নয়, তাই আমি একটি বদ্ধ বীজগণিত টাইপ ঘোষণা করার এবং এটির সাথে পরিপূর্ণরূপের প্যাটার্নটি মিলানোর কিছু উপায় পছন্দ করতাম (মূলত দর্শকের প্যাটার্নের জন্য প্রথম শ্রেণির সমর্থন, তবে অনেক বেশি দক্ষ); সুতরাং কেবল এনামগুলি নিন, এগুলিকে পরিপূর্ণ প্যাটার্ন মেলানো সমর্থন দিয়ে প্রসারিত করুন এবং অবৈধ মামলাগুলিকে অনুমতি দিন না,
  13. আমি সাধারণভাবে প্যাটার্ন মিলের জন্য সমর্থন চাই, তবে খুব কমপক্ষে অবজেক্টের ধরণের পরীক্ষার জন্য; আমি এখানে অন্য পোস্টে প্রস্তাবিত সুইচ সিনট্যাক্সের মতোও চাই,
  14. আমি অন্য একটি পোস্টের সাথে একমত যে System.IOক্লাসগুলি যেমন Streamকিছুটা খারাপভাবে নকশাকৃত; যে কোনও ইন্টারফেসের নিক্ষেপ করার জন্য কিছু বাস্তবায়ন প্রয়োজন সেগুলি NotSupportedExceptionএকটি খারাপ ডিজাইন,
  15. IListএটি তুলনায় অনেক সহজ হতে হবে; আসলে, কংক্রিট সংগ্রহ ইন্টারফেসের অনেকের ক্ষেত্রে এটি সত্য হতে পারে, যেমন ICollection,
  16. উদাহরণস্বরূপ আইডি অভিধান হিসাবে অনেকগুলি পদ্ধতি ব্যতিক্রম ছুঁড়ে ফেলে,
  17. আমি জাভাতে উপলভ্য চেয়ে চেক করা ব্যতিক্রমগুলির ফর্মটিকে আরও ভাল পছন্দ করব (এটি কীভাবে করা যায় তার জন্য টাইপ এবং এফেক্ট সিস্টেমগুলির উপর গবেষণা দেখুন),
  18. জেনেরিক পদ্ধতি ওভারলোড রেজোলিউশনে বিভিন্ন বিরক্তিকর কোণার মামলাগুলি ঠিক করুন; উদাহরণস্বরূপ, দুটি ওভারলোডেড এক্সটেনশন পদ্ধতি সরবরাহ করার চেষ্টা করুন, একটি যা রেফারেন্স ধরণের উপর পরিচালিত হয়, এবং অন্যটি ন্যাবল স্ট্রাক্ট প্রকারের উপর, এবং দেখুন আপনার প্রকারের অনুমানটি কীভাবে পছন্দ করে,
  19. ফিল্ড এবং সদস্যের নামগুলি ইন্টারফেসের মতো নিরাপদে প্রতিফলিত করার একটি উপায় সরবরাহ করে INotifyPropertyChanged, যা ক্ষেত্রের নামটিকে স্ট্রিং হিসাবে গ্রহণ করে; আপনি কোনও এক্সটেনশন পদ্ধতি ব্যবহার করে এটি করতে পারেন যা কোনও ল্যাম্বদা লাগে MemberExpression, অর্থাত্‍। () => Fooতবে এটি খুব দক্ষ নয়,
    • আপডেট: সি # 6.0 nameof()একক সদস্যের নামের জন্য অপারেটর যুক্ত করেছে , তবে এটি জেনেরিকের সাথে কাজ করে না ( nameof(T) == "T"আসল টাইপ-যুক্তির নামের পরিবর্তে: আপনাকে এখনও করা দরকার typeof(T).Name) - না এটি আপনাকে "পথ" স্ট্রিং পেতে দেয় না উদাহরণস্বরূপ, nameof(this.ComplexProperty.Value) == "Value"এর সম্ভাব্য অ্যাপ্লিকেশনগুলি সীমাবদ্ধ করা।
  20. ইন্টারফেসগুলিতে অপারেটরদের অনুমতি দিন এবং সমস্ত মূল সংখ্যার প্রকার প্রয়োগ করুন IArithmetic; অন্যান্য দরকারী শেয়ার্ড অপারেটর ইন্টারফেস এছাড়াও সম্ভব,
  21. অবজেক্ট ক্ষেত্র / বৈশিষ্ট্যগুলিকে পরিবর্তন করতে খুব শক্ত করুন বা খুব কমপক্ষে অপরিবর্তনীয় ক্ষেত্রগুলি বর্ননা করুন এবং প্রকারের পরীক্ষককে এটি প্রয়োগ করুন (কেবল এটিকে কেবল গেটের একমাত্র সম্পত্তি হিসাবে বিবেচনা করুন, এটি শক্ত নয়!); প্রকৃতপক্ষে ক্ষেত্র এবং বৈশিষ্ট্যগুলিকে আরও বোধগম্যভাবে একীভূত করুন যেহেতু উভয়ই থাকার কোনও কারণ নেই; সি # 3.0 এর স্বয়ংক্রিয় বৈশিষ্ট্যগুলি এই দিকের প্রথম ধাপ, তবে তারা যথেষ্ট পরিমাণে যায় না,
    • আপডেট: যদিও সি # এর readonlyকীওয়ার্ড ছিল এবং সি # 6.0 কেবল পঠনযোগ্য অটো-বৈশিষ্ট্য যুক্ত করেছে, যদিও এটি অপরিবর্তনীয় প্রকার এবং মানগুলির জন্য সত্য ভাষা সমর্থন হিসাবে কঠোর নয়।
  22. নির্মাতারা ঘোষণা সহজ করে; আমি এফ # এর পদ্ধতিকে পছন্দ করি তবে এখানে অন্যান্য পোস্টের জন্য ক্লাস নামের পরিবর্তে কেবল "নতুন" প্রয়োজন কমপক্ষে আরও ভাল,

আমি এখন মনে করি এটি যথেষ্ট। এগুলি হ'ল গত সপ্তাহে আমি সমস্ত জ্বালা। আমি যদি সত্যিই আমার মনটিতে রাখি তবে আমি সম্ভবত কয়েক ঘন্টা যেতে পারি। সি # 4.0 ইতিমধ্যে নামযুক্ত, alচ্ছিক এবং ডিফল্ট যুক্তি যুক্ত করছে, যা আমি দৃhat়তার সাথে অনুমোদিত।

এখন একটি অযৌক্তিক অনুরোধের জন্য:

  1. এটি সত্যিই সত্যিই খুব ভাল লাগত যদি সি # / সিএলআর টাইপ কনস্ট্রাক্টর পলিমারফিজমকে সমর্থন করতে পারে, যেমন। জেনেরিকের উপর জেনেরিকস,

খুব দয়া করে? :-)


4
# 1 সম্পর্কিত, প্রতিটি প্রকারের অবশ্যই কিছু ডিফল্ট মান থাকতে হবে বা যখন কোনও নির্দিষ্ট ধরণের ভেরিয়েবল বা ক্ষেত্র বরাদ্দ করা হয় তখন সিস্টেমকে অবশ্যই নির্মাণকারীর চালনার একটি উপায় সরবরাহ করতে হবে। আমি উত্তরোত্তরগুলি পছন্দ করবো (# 2 এর একটি অফশুট) তবে যদি অ-ভার্চুয়াল পদ্ধতি / বৈশিষ্ট্যগুলি সুনির্দিষ্টভাবে সজ্জিত করা যায় যে তারা নাল-চেক ছাড়াই ডাকা হবে। এটি "স্ট্রিং" ক্ষেত্রের মতো জিনিসগুলিকে এমনভাবে আচরণ করতে দেয় যা তারা শূন্যের চেয়ে খালি স্ট্রিংয়ে ডিফল্ট হয় (যেহেতু স্ট্রিংয়ের স্থির "দৈর্ঘ্য" ফাংশনটি নাল স্ট্রিংয়ের সাথে অনুরোধ করা হলে 0 ফিরে আসতে পারে)।
— সুপারক্যাট

4
# 2 সম্পর্কিত ক্ষেত্রে, এটি কার্যকরভাবে কার্যকর হবে যদি স্ট্রাইকগুলি শূন্য-পূরণের ব্যতীত কেবল অন্য কোনও নির্মাণকারীকেই নির্দিষ্ট করতে না পারে, তবে বাইট-বাইট-অনুলিপি ব্যতীত অন্য অনুলিপি নির্মাণকারীকেও নির্ধারণ করতে পারে। প্রকৃতপক্ষে, আমি সত্যিই একটি। নেট-এর মতো কাঠামো দেখতে চাই যা সত্তাগুলির মান বা রেফারেন্স শব্দার্থবিজ্ঞান থাকতে পারে এবং মান-ধরণের হিপ অবজেক্টগুলিকে পারস্পরিক পরিবর্তনযোগ্য, ভাগ-পরিবর্তনযোগ্য, বা অনির্ধারিতভাবে অনুমতি দেওয়ার জন্য ভাল কাজ করতে পারে (একটি অননুমোদিত মান অবজেক্টটি রূপান্তরিত হতে পারে যদি এর মোডটি প্রথমে তুলনামূলক এক্সচেঞ্জকে মিউটেবলের সাথে তুলনা করা হয়, বা ভাগ করা যেতে পারে যদি তার মোডটি প্রথম ভাগ করা হয় সাথে ভাগ করা যায়))
— সুপারক্যাট

4
দুর্দান্ত পয়েন্ট! # 1 এর জন্য, কোনও টাইপ সিস্টেম টীকা হ'ল সাধারণ সমাধান তবে আমি টি: নতুন () এর মতো টাইপের ভেরিয়েবলের মাধ্যমে কনস্ট্রাক্টরের সীমাবদ্ধতা প্রচার করতে পছন্দ করি। উত্তর: # 2, অনুলিপি নির্মাণকারী সম্পর্কে ভাল পয়েন্ট, তবে আমি উপরে বর্ণিত রেখাগুলি সহ আরও সাধারণ কনস্ট্রাক্টরদের সাথে খুশি হব। আরও ভাল হবে সম্পূর্ণরূপে কনস্ট্রাক্টর-হিসাবে-বিশিষ্ট-পদ্ধতিগুলি নির্মূল করা এবং কেবল তাদের স্থির পদ্ধতিগুলি তৈরি করা। এটি সহজ এবং আরও সাধারণ নির্মাণ নিদর্শনগুলিকে মঞ্জুরি দেয়, বিশেষত যদি আমরা ইন্টারফেসগুলিতে স্থির পদ্ধতিগুলিকে অনুমতি দিই। কনস্ট্রাক্টর-স্ট্যাটিক-মেথড + স্ট্যাটিক-মেথড-ইন-ইন্টারফেসগুলি # 1 টিও সমাধান করে।
— নাস্কিং

4
# 3: জেনেরিক টাইপ প্যারামিটার হিসাবে সিল করা ক্লাসটি ব্যবহার করার বিন্দুটি কী, উদাহরণস্বরূপ Foo <T> যেখানে টি: স্ট্রিং? # 11: ঠিক আছে, তাই আমি List<T>এক মিলিয়ন টন পেয়েছি । আপনি কীভাবে প্রস্তাব দেন যে স্ন্যাপশটটি দক্ষতার সাথে নেওয়া হবে? # 21: readonlyকীওয়ার্ডটি ব্যবহার করুন .... এখানে কিছু ভাল পরামর্শ থাকার পরেও সেগুলি বেশিরভাগ ক্ষেত্রেই - পরামর্শগুলি, ত্রুটিগুলি নকশা করে না।
— কিওয়ার্টি

4
এটি একটি খুব আকর্ষণীয় উত্তর, তবে আমি মনে করি আমাদের সি # 6 বৈশিষ্ট্যগুলি আপডেট করা উচিত। উদাহরণ: 19 এবং 21 টি আইটেম প্রয়োগ করা হয়েছে =)
— এডুয়ার্ডোবর

72
  • Reset()পদ্ধতির উপর IEnumerator<T>একটা ভুল ছিল (পুনরুক্তিকারীর ব্লক জন্য, ভাষা বৈশিষ্ট এমনকি দাবী যে এই একটি ব্যতিক্রম ছোঁড়ার)
  • অ্যারে ফিরিয়ে দেওয়ার প্রতিচ্ছবি পদ্ধতিগুলি ছিল এরিকের দৃষ্টিতে, একটি ভুল
  • অ্যারে covariance ছিল এবং একটি বিজোড়তা
    • আপডেট: সি # 4.0। নেট 4.0 এর সাথে জেনেরিক ইন্টারফেসগুলিতে (যেমন IEnumerable<out T>এবং Func<in T, out TResult>তবে কংক্রিটের ধরণের নয় (যেমন List<T>) নয় তেমন কোভারিয়েন্ট / বিপরীত সমর্থন যোগ করা হয়েছে added
  • ApplicationException বরং অনুকূলে পড়ে গেল - এটা কি ভুল ছিল?
  • সিঙ্ক্রোনাইজ সংগ্রহ - একটা চমৎকার ধারণা, কিন্তু বাস্তবে অগত্যা দরকারী নয়: আপনি সাধারণত সুসংগত প্রয়োজন একাধিক কার্যকলাপ ( Contains, তারপর Add,) তাই একটি সংগ্রহ যে স্বতন্ত্র অপারেশন করে সিঙ্ক্রোনাইজ সব দরকারী নয়
    • আপডেট করুন: ধরনের সঙ্গে , , , ইত্যাদি .NET ফ্রেমওয়ার্ক 4.0 মধ্যে যোগ করা হয় নি - যদিও পদ্ধতি একটি কারখানা প্রতিনিধি গ্রহণ গ্যারান্টি নেই কারখানা শুধুমাত্র প্রতি কী একবার প্রার্থনা করা হবে না।System.Collections.ConcurrentTryAddGetOrAddTryRemove
  • আরও ব্যবহার using/ lockপ্যাটার্ন দিয়ে তৈরি করা যেতে পারে - সম্ভবত তাদের পুনরায় ব্যবহারযোগ্য (এক্সটেনসিবল?) সিনট্যাক্স ভাগ করার অনুমতি দেয়; আপনি ফিরে IDisposableএবং ব্যবহার করে usingএটি অনুকরণ করতে পারেন , তবে এটি আরও পরিষ্কার হতে পারে
  • পুনরুদ্ধারকারী অবরুদ্ধ: আর্গুমেন্ট সাময়িকভাবে পরীক্ষা করার সহজ উপায় (অলসতার চেয়ে)। অবশ্যই, আপনি দুটি শৃঙ্খলিত পদ্ধতি লিখতে পারেন তবে এটি কুৎসিত
  • সহজ অপরিবর্তনীয়তা চমৎকার হবে; সি # 4.0 কিছুটা সহায়তা করে , তবে যথেষ্ট নয়
  • কোনও "এই রেফ-টাইপ প্যারামিটার নাল হতে পারে না" সমর্থন - যদিও চুক্তিগুলি (4.0 এ) এটি কিছুটা সহায়তা করে। তবে সিনট্যাক্সের মতো Foo(SqlConnection! connection)(এটি একটি নাল-চেক / ইনজেকশন দেয় throw) চমৎকার হবে ( int?ইত্যাদির বিপরীতে )
  • জেনেরিক সহ অপারেটর এবং অ-ডিফল্ট নির্মাতাদের সহায়তার অভাব; সি # 4.0 এটিকে কিছুটা সমাধান করে dynamicবা আপনি এটি এটি সক্ষম করতে পারেন
  • পুনরুক্তিকারীর পরিবর্তনশীল ঘোষিত হওয়ার বাহিরে যখন foreachসম্প্রসারণ, যার মানে হল অতি শীঘ্র-পদ্ধতি / lambdas একক পরিবর্তনশীল ক্যাপচার বদলে পুনরাবৃত্তির প্রতি এক (সঙ্গে থ্রেডিং / ASYNC জন্য / etc বেদনাদায়ক)

আইনিউমারেবল! = অনুমানযোগ্য <অবজেক্ট> সত্যই অদ্ভুত
— রাউহটজ

4
ঠিক আছে, আইনিম্যারেবল জিনিসটি 1.1 হ্যাংওভার; আপনি লিনকউ সহ কাস্ট <বিজেক্ট> () ব্যবহার করতে পারেন
— মার্ক গ্র্যাভেল

8
ছাত্রলীগের লোকেরা বলেছিল যে ApplicationExceptionএটি একটি ভুল ছিল - তারা যেমন আশা করেছিল তেমন কার্যকর নয়। তারাও বলেছিল যে System.Exceptionহওয়া উচিত ছিল abstract।
— জে বাজুজি

4
নন-অযোগ্য: কোনও নিয়মিত রেফারেন্স টাইপ টি এমন কোনও কিছুর কাছে পাস করার একটি সংকলন ত্রুটি হওয়া উচিত যা একটি অ-শর্তহীন টি লাগে! (ঠিক যেমন আপনি int- এ পাস করতে পারবেন না)? অন্য দিকটি অতিক্রম করা অবশ্যই ঠিক।
— জে বাজুজি

4
@ জোন হ্যারোপ: আইএমএইচও, অপরিবর্তনীয় অ্যারে এবং কেবল পঠনযোগ্য অ্যারে রেফারেন্সের জন্য সমর্থন থাকা উচিত ছিল। সম্ভবত কিছু অন্যান্য অ্যারে বৈকল্পিকগুলির জন্যও (উদাহরণস্বরূপ "resizable অ্যারে" (অপ্রত্যক্ষ রেফারেন্স), বা একটি অফসেট এবং আবদ্ধ একটি অ্যারে রেফারেন্স)।
— সুপারক্যাট

60

টেক্সট রাইটার স্ট্রিম রাইটারের একটি বেস ক্লাস। ডাব্লুটিএফ?

যা আমাকে সর্বদা চরমভাবে বিভ্রান্ত করে।


19
+1 আমাকে প্রতিবার এটি সন্ধান করতে হবে। (Hadাড্ডা মানে আমি নতুন পাঠ্য রচয়িতা ()?)
— নিকোলাস পাইসেকি

4
Godশ্বরের ধন্যবাদ ... আমি ভেবেছিলাম এটি কেবল আমারই ছিল।
— আইজে কেনেডি

? এটি সর্বদা এমন কিছু যা পাঠ্য লেখেন তবে কেবল স্ট্রিম রাইটার একটি স্ট্রিমে এটি করে। বেশ সোজা মনে হচ্ছে।
— জন হান্না

4
স্ট্রিম রাইটার নামটি এটিকে সত্য করে তোলে না যে এটি স্পষ্টতই যথেষ্ট পরিমাণে IMO লেখেন। এটি বিচ্ছিন্নভাবে শোনাচ্ছে যেমন এটি কেবল বাইটগুলি লিখবে এবং টেক্সট রাইটারটি শীর্ষে একটি অভিনব বাস্তবায়ন হবে যা আপনার জন্য স্ট্রিং টু রাইটের এপিটিকে বাইটে রূপান্তরিত করবে। এখন যদি এটিকে
— স্ট্রিমটেক্সট রাইটার

44

একটি ছোট সি # পোষা প্রাণী - নির্মাণকারীরা বর্গ হিসাবে একই নাম নির্মাতাকে থাকার সি ++ / জাভা বাক্য গঠন ব্যবহার করে synt

New()বা ctor()অনেক ভাল হত।

এবং নিশ্চিত, কোডারুশের মতো সরঞ্জামগুলি ক্লাসের নামকরণের জন্য এটিকে কম সমস্যা তৈরি করে, তবে একটি পঠনযোগ্যতা পিওভি, নিউ () থেকে দুর্দান্ত স্পষ্টতা সরবরাহ করে।


এরম, আপনি কীভাবে একটি নতুন উদাহরণ তৈরি করার চেষ্টা করছেন তা এটি কীভাবে জানতে পারে?
— ব্লুরাজা - ড্যানি পিফ্লুঘুফুট

4
@ ব্লুরাজা: স্কট ক্লাসে নির্মাণকারীদের নামকরণের কথা উল্লেখ করছে। class Foo { new(int j) {i = j} int i; }
— ডাল

যদিও আমি 100% সম্মতি দিচ্ছি যে কর্টর () বা কনস্ট্রাক্টর () ভাল হতে পারত ( New-প্রেসকেস কীওয়ার্ডগুলি কনভেনশনবিরোধী নয় ), তবে আমি একে ডিজাইনের ত্রুটি বলতে দ্বিধা বোধ করি। তারা বিদ্যমান সি ++ / জাভা বিকাশকারীদের আকর্ষণ করতে চেয়েছিল এবং প্রচুর বোকা পুরানো সিনট্যাকটিক সম্মেলনগুলি তর্কসাপেক্ষভাবে তাদের লক্ষ্যে পৌঁছাতে সহায়তা করেছিল।
— কিওয়ারটি

এই প্রশ্নের সাথে সম্পর্কিত: স্ট্যাকওভারফ্লো / প্রশ্ন / 32৩১০১৯ 3 / সি -শার্প -সোর্ট্ট-লিঙ্কলিস্ট কোনও উপায় নেই (কেবলমাত্র নেট ব্যবহার করে) মার্জসার্ট, বালকেটসোর্ট বা অন্য কোনও বাছাই করা অ্যালগরিদম সহ লিংকলিস্ট বাছাই করার জন্য তবে লিনাক ব্যবহার করা ধীরে ধীরে। এডহক বাস্তবায়ন চেয়ে।
— কফডেভলপার

29

আমি বুঝতে পারি না যে আপনি পারবেন না

যেখানে টি: নতুন (ইউ)

সুতরাং আপনি ঘোষণা করেন যে জেনেরিক টাইপ টিতে একটি অ-ডিফল্ট কনস্ট্রাক্টর রয়েছে।

সম্পাদনা করুন:

আমি এটা করতে চাই:

public class A 
{
    public A(string text) 
    {

    }
}


public class Gen<T> where T : new(string text) 
{

}

একটি জেনেরিক টাইপ ঘোষণা করে যে আপনি কীভাবে সেই ধরণের অবজেক্টগুলি ব্যবহার করবেন, অর্থাত্ তাদের ইন্টারফেস। কনস্ট্রাক্টর সেই ইন্টারফেসের একটি বাস্তবায়ন বিশদ যা গ্রাহকের উদ্বেগ নয়। যখন আপনাকে প্যারামিটারাইজড দৃষ্টান্ত তৈরি করতে হবে, একটি কারখানা ব্যবহার করুন।
— ব্রায়ান ওয়াটস

তথ্যের জন্য, যদিও এটি কম্পাইল-টাইম চেকিং করতে পারে না, মিস-ইউটিলে অ-ডিফল্ট কনস্ট্রাক্টর (জেনেরিক্সে) দক্ষতার সাথে ব্যবহার করার জন্য কিছু কোড রয়েছে, যেমন অ্যাক্টিভেটর ছাড়া ate
— মার্ক গ্র্যাভেল

কারণ এটি কোনও অর্থবোধ করে না এবং কিছু ব্যবহারে বিভ্রান্ত হয়। তবুও অপরিবর্তনীয় বস্তুর সাথে কাজ করার সময় এটি কার্যকর হতে পারে।
— পপ ক্যাটালিন

7
সাধারণভাবে, সদস্যের সীমাবদ্ধতার অভাব বিরক্তিকর, হ্যাঁ।
— মাইকেলজিজি

4
আমিন, আমি সর্বদা এটি চেয়েছিলাম
— স্টিভ

20

আমি সত্যিই অবাক হয়েছি যে আমি এটির প্রথম উল্লেখ করেছি:

ADO.NET টাইপ করা ডেটা সেটগুলি nlalable প্রকারের বৈশিষ্ট্য হিসাবে নমনীয় কলামগুলি প্রকাশ করে না। আপনার এটি লিখতে সক্ষম হওয়া উচিত:

int? i = myRec.Field;
myRec.Field = null;

পরিবর্তে, আপনাকে এটি লিখতে হবে, যা কেবল বোকা:

int? i = (int?)myRec.IsFieldNull() ? (int?)null : myRec.Field;
myRec.SetFieldNull();

এটি নেট .০.০ এ বিরক্তিকর ছিল, এবং এটি এখন আরও বিরক্তিকর যে আপনাকে আপনার সুন্দর ঝরঝরে লিনকুই ক্যোয়ারিতে উপরের মতো জিগি-পোকারি ব্যবহার করতে হবে।

এটি বিরক্তিকর যে উত্পন্ন Add<TableName>Rowপদ্ধতিটি একই ধরণের নালাগুলির ধারণার প্রতি সংবেদনশীল। উত্পন্ন TableAdapterপদ্ধতিগুলি না হওয়ায় আরও বেশি ।

নেট তে খুব বেশি কিছু নেই যা দেব দলটির মতো আমাকে অনুভব করে বলেছিল "ঠিক আছে ছেলেরা, আমরা যথেষ্ট কাছে এসেছি - শিপ!" তবে এটি নিশ্চিত করে।


আমি আন্তরিকভাবে একমত! প্রতিবার আমাকে এটি ব্যবহার করতে হবে (যা প্রায়শই হয়) এটি আমাকে বাগিয়ে দেয়। আঃ! +1
— আইভিন্দ

4
তারা যেটা করতে পারে তা হ'ল নতুন ডেটাসেটভি 2 ক্লাস (খারাপ নাম - কেবল যুক্তির স্বার্থে) নিয়ে আসা, যা পুরো ডিবিএনুলের পরিবর্তে অণুগঠিত মানের ধরণের ব্যবহার করে।
— খ্রিস্টান হাইটার

আসুন কোনও বিশেষ মানের প্রয়োজনের অযৌক্তিকতাটি ভুলে যাবেন না DBNull.Value, যখন nullনিজেই NULL উপস্থাপনের জন্য যথেষ্ট উপযুক্ত হত। ভাগ্যক্রমে লিনিক-টু-এসকিউএল কেবল নুলের জন্য নাল ব্যবহার করে।
— কিওয়ার্টি

আসলে অযৌক্তিকতা হ'ল সেই শিলা যার উপরে পুরো অযৌক্তিক মন্দিরটি নির্মিত হয়েছিল।
— রবার্ট রসনি

20
  1. আমি স্ট্রিম, স্ট্রিং রাইটার, স্ট্রিংরেডার, টেক্সটরাইডার, টেক্সট রাইটার ক্লাসের খুব বড় অনুরাগী নই ... এটি আসলে কোনটি স্বজ্ঞাত নয় what
  2. আইনিউমারেবল। পুনরাবৃত্তিকারীদের জন্য একটি ব্যতিক্রম ছোঁড়া পুনরায় সেট করুন। আমার কিছু তৃতীয় পক্ষের উপাদান রয়েছে যা ডেটাবাউন্ড করার সময় সবসময় রিসেট কল করে, এগুলি ব্যবহারের জন্য প্রথমে আমাকে একটি তালিকায় কাস্ট করা প্রয়োজন।
  3. এক্সএমএল সিরিয়ালাইজারটিতে সিরিয়ালযুক্ত আইডোরিয়াল উপাদান থাকা উচিত
  4. আমি HTTPWebRequest & FTP এপিআই সম্পর্কে সম্পূর্ণরূপে ভুলে গেছি আমার কি কষ্ট হচ্ছে .... (নিকোলাস মন্তব্যটির জন্য ধন্যবাদ এটি সম্পর্কে মনে করিয়ে দেওয়ার জন্য :-)

আমার সম্পাদনা
৫. আমার আরেকটি বিরক্তি হ'ল কীভাবে সিস্টেম.রিফ্লেশন.বাইন্ডিং ফ্ল্যাজেসের পদ্ধতিটি আপনার ব্যবহারের উপর নির্ভর করে বিভিন্ন ব্যবহার করে। ফাইন্ডফিল্ডগুলিতে উদাহরণস্বরূপ ক্রিয়েটইনস্টান্স বা সেটফিল্ড বলতে কী বোঝায়? এটি এমন একটি ক্ষেত্রে যেখানে তারা এই গণনার পিছনে অর্থটি বোঝা ফেলেছে যা বিভ্রান্তিকর।


4
+1 আমাকে প্রতি একক সময় XMLTextWriter, TextWriter, ইত্যাদি শ্রেণীর সন্ধান করতে হবে। HttpWebRequest / প্রতিক্রিয়া স্টাফ একই। সম্পূর্ণরূপে অদম্য এপিআই
— নিকোলাস পাইসেকি

+ 1-1 = 0: XMLTextWriter ইত্যাদি, আমি নাম থেকে তারা কী তা সঠিকভাবে নির্ধারণ করা অসম্ভব বলে সম্মত। HTTPWebRequest আমি সম্মত নই আমি এটিকে বেশ স্বজ্ঞাত বলে মনে করি।
— অ্যান্থনিডাব্লু জোনস 9:40 '

আমি প্রত্যেকে তার নিজের মনে করি। আমি অনুমান করি এফটিপি দিয়ে আমি উচ্চ স্তরের বিমূর্ততা আশা করব তবে তাদের কী আছে।
— জোশবার্ক

15

আমি জানি না যে আমি এটির ডিজাইনের ত্রুটি বলতে যতদূর যেতে পারব, তবে আপনি যদি ভিবিতে যেভাবে ল্যাম্বডা এক্সপ্রেশনটি করতে পারেন ঠিক তেমনভাবেই অনুগ্রহ করতে পারলে এটি খুব সুন্দর হবে:

ভিবি:

Dim a = Function(x) x * (x - 1)

সি #

এটি করতে পারলে ভাল হত:

var a = x => x * (x - 1);

এটি করার পরিবর্তে:

Func<int, int> a = x => x * (x - 1);

আমি বুঝতে পারি যে এটি বেশি দিন নয়, তবে কোড গল্ফে প্রতিটি চরিত্রই গুনে গুনে! তারা যখন এই প্রোগ্রামিং ল্যাঙ্গুয়েজগুলি ডিজাইন করে তখন তারা কি তা বিবেচনায় রাখে না? :)


4
মাইক্রোসফ্ট কোড গল্ফ ভাষা বিবেচনা করা উচিত?
— jrcs3

4
@ রে বার্নস: এটি ভিবিতে কীভাবে জানবে? ভিবি এটি সমর্থন করে, তবে পার্থক্য কী?
— বেনএলাবাস্টার

4
@ রায়বার্নস টাইপ অনুমান? আমি 1989 সাল থেকে এটি ব্যবহার করে আসছি
— আরডি 1

4
লামদাস সি # তে হোমোকোনিক। খণ্ডটির (int x) => x * (x -1);অর্থ হতে পারে Func<int, int>বা এর অর্থ হতে পারেExpression<Func<int, int>>
— স্কট ওয়েইনস্টেইন

4
@ বেনাব্লাবাস্টার: ভিবি দেরীতে আবদ্ধ গাণিতিক অপারেটরদের সমর্থন করে। সি # সংকলন সময়ে এগুলি সমাধান করতে হবে। এটি একটি ভাষার পার্থক্য। উদাহরণস্বরূপ, ভিবি দুটি জিনিস একসাথে যুক্ত করতে পারে। সি # পারবেন না কারণ +এটির জন্য সংজ্ঞা দেওয়া হয়নি object।
— পুনরাবৃত্তি

14
  1. System.Object শ্রেণী:

    • সমান এবং গেটহ্যাশকোড - সমস্ত শ্রেণীর তুলনাযোগ্য বা হ্যাশযোগ্য নয়, একটি ইন্টারফেসে স্থানান্তরিত হওয়া উচিত। আইক্যায়েটেবল বা আইকোম্যাপারেবল (বা অনুরূপ) মনে আসে।

    • টোস্ট্রিং - সমস্ত শ্রেণি স্ট্রিংয়ে রূপান্তরিত হতে পারে না, কোনও ইন্টারফেসে স্থানান্তরিত হওয়া উচিত। আইফোর্মেটেবল (বা অনুরূপ) মাথায় আসে।

  2. ICollection.SyncRoot সম্পত্তি:

    • দুর্বল ডিজাইন প্রচার করে, একটি বাহ্যিক লক প্রায় সবসময় আরও কার্যকর।
  3. জেনারিকস শুরু থেকেই সেখানে থাকা উচিত ছিল:


4
১. এই পদ্ধতিগুলি এত সাধারণ যে সিদ্ধান্ত নেওয়া হয়েছিল যে অডবোলের মামলাগুলি ঠিক আছে, কেউ যদি আপনার ক্লাসে অবজেক্ট.একুয়ালসকে কল করতে পারে তবে তা কি বিবেচনা করে? এটি জানা যায় যে বাস্তবায়ন হতে পারে বা নাও হতে পারে, এবং প্রয়োজনীয়: আইকোয়েটেবল, আইফোর্মেটেবল 99% ক্লাসে বিজোড়।
— গুভান্তে

4
উদাহরণস্বরূপ, ব্যবহারকারী-সংজ্ঞায়িত অবজেক্টের সাথে কী হিসাবে ডিফল্ট রেফারেন্স সমতা ব্যবহার করে অভিধান তৈরি করতে সক্ষম হবেন, এটি উদ্দেশ্যে ব্যবহারকারী-সংজ্ঞায়িত অবজেক্টগুলিতে স্পষ্টভাবে কোড যুক্ত না করেই। আমি ফাইনালাইজকে অনেক বড় বর্জ্য হিসাবে বিবেচনা করব (এর চেয়ে আরও ভাল বিকল্পের জন্য আইফাইনালাইজেবল বাস্তবায়ন করতে হবে এবং চূড়ান্তকরণের জন্য স্পষ্টভাবে নিজেকে নিবন্ধন করতে হবে এমন বস্তুর থাকতে হবে)। OTOH, আইডি ডিসপোজেবলের আরও বেশি সহজাত সমর্থন থাকা উচিত ছিল, যদি কোনও নির্মাণকারী ব্যতিক্রম ছুঁড়ে মারেন তবে ডিসপোজ কল করতে হবে।
— সুপারক্যাট

4
@ সুপের্যাট: যা যা প্রয়োজন তা হ'ল EqualityComparer<T>.Defaultসঠিকভাবে আপডেট করা। তারপরে var dict = new Dictionary<object, string>(EqualityComparer<object>.Default)এবং উভয়ই var dict = new Dictionary<object, string>()রেফারেন্স তুলনা / সাম্য ব্যবহার করবে।
— ডালে

4
@ সুপের্যাট: আপনি যা বর্ণনা করেছেন তা হ'ল যা EqualityComparer<T>.Defaultকরে। প্রতিটি দেখার জন্য চেক করার প্রয়োজন নেই। তুলনাকারী Dictionaryউদাহরণস্বরূপ একটি সম্পত্তি , এবং প্রত্যেকে Dictionaryজানে যে এটি কোনটি ব্যবহার করছে।
— ডাল

4
@ সুপের্যাট: একটি অভিধান অবশ্যই সর্বাধিক জেনেরিক প্রকার (যেমন সাধারণ বেস শ্রেণি) কী হিসাবে ব্যবহার করতে হবে, একই অভিধানে স্ট্রিংস এবং ডেটটাইম উভয়ই ব্যবহার করে কোনও রেফারেন্স-তুলনা না করা ছাড়া কোনও প্রভাব ফেলবে না, যদি না কোনও ব্যবহারকারী-সংজ্ঞায়িত তুলনা প্রমাণিত হয় যে হয় মনে রাখবেন যে এই বিষয়ের নাম "সি # (.এনইটি) ডিজাইন ত্রুটি"।
— ডাল

12

আমার বিরক্তিকর জিনিসগুলির মধ্যে একটি হ'ল Predicate<T> != Func<T, bool>প্যারাডক্স। তারা উভয় প্রকারের প্রতিনিধি T -> boolএবং তবুও তারা নিয়োগের সাথে সামঞ্জস্যপূর্ণ নয়।


সেখানে Delegate.Create এবং কিছু ঢালাই ব্যবহার রূপান্তর করতে একটি কৌতুক, কিন্তু (আমি কিন্তু অন্তর্নিহিত জন্য সমর্থন অভাব বুঝতে পারেন) অন্তত একটি সুনির্দিষ্ট ঢালাই করতে চমৎকার হবে সক্ষম হচ্ছে
— Guvante

সাধারণভাবে প্রতিনিধিদের নকশা ত্রুটিযুক্ত; উদাহরণস্বরূপ দুর্বল ইভেন্টের অভাব (গ্রাহকের কাছ থেকে বিশেষ প্রচেষ্টা ব্যতীত উত্স-দুর্বল দুর্বল ইভেন্টগুলি কেবলমাত্র প্রতিচ্ছবি এবং প্রতিবিম্বের অনুমতি দিয়ে সম্পন্ন করা যেতে পারে, কোডেপ্রজেক্ট / আর্টিকেলস / 29922/Weak-Events-in-C দেখুন ), এবং অদক্ষতা যা প্রয়োজনীয়তা থেকে আসে যে প্রতিনিধিদের অবশ্যই রেফারেন্স প্রকারের হতে হবে (প্রতিনিধিরা আরও দ্রুত থাকতেন, এবং অনেক ক্ষেত্রে 1/3 হিসাবে অনেক বেশি মেমরি ব্যবহার করতে পারতেন, যদি তারা মান ধরণের হতো) তবে তারা কেবল একটি জুড়ি হত পয়েন্টার যে আপনি স্ট্যাকের উপর দিয়ে যেতে পারেন))
— কিওয়ার্টি

11

কিছু লোক (আইএসভি) আশা করেন যে আপনি এটি নির্মাণের সময় মেশিন কোডে সংকলন করতে এবং এটির সাথে লিঙ্ক করতে পারেন, এমন কোনও নেটিভ এক্সিকিউটেবল তৈরি করতে যাতে ডটনেট রান-টাইমের প্রয়োজন হয় না।


চালানোর আগে আপনার প্রোগ্রামটি এনজিএন করতে সক্ষম হওয়া উচিত।
— ওটিভিও ডাসিও

রানটাইমের নির্ভরতা অপসারণ করার মতো নয়। আপনি কেবল আপনার কোডের মাধ্যমে প্রথম জেআইটি রান সংরক্ষণ করুন।
— এড এস।


এটির জন্য কোনও অবহেলা সরঞ্জাম নেই? এটি আপনার এক্সে ফ্রেমওয়ার্ক এম্বেড করবে যাতে আপনার এটি মোতায়েন করতে হবে না। আমি এর নামটি রেন্ডার করতে পারি না ... এটি প্রিম্পেটিভের নয় ...
— জোশবার্ক

4
জেনোকোডের পোস্টবিল্ড কি তা করে না? ভিজ্যুয়াল স্টুডিওতে এটি করার উপায় থাকলে খুব ভাল
— হত

11

সঠিক ওও কৌশল সম্পর্কে আমরা অনেক কিছু জানি । চুক্তি অনুসারে প্রোগ্রামিং করা, অনুচিত উত্তরাধিকার এড়ানো, ব্যতিক্রমগুলির যথাযথ ব্যবহার, উন্মুক্ত / বদ্ধ প্রিন্সিপাল, লিসকভের বিকল্প পরিবর্তন ইত্যাদি। এখনও, নেট ফ্রেমওয়ার্কগুলি সেরা অনুশীলনগুলিকে নিয়োগ করে না।

আমার কাছে ডিজাইনের একক বৃহত্তম ত্রুটি। নেট দৈত্যদের কাঁধে দাঁড়িয়ে নেই; তাদের ফ্রেমওয়ার্কগুলি ব্যবহার করে এমন প্রোগ্রামারদের জনগণের কাছে আদর্শ প্রোগ্রামিং দৃষ্টান্তের চেয়ে কম প্রচার করা ।

এমএস যদি এটি মনোযোগ দেয় তবে সফটওয়্যার ইঞ্জিনিয়ারিং ওয়ার্ল্ড এই দশকে গুণমান, স্থিতিশীলতা এবং স্কেলিবিলিটির দিক থেকে দুর্দান্ত লাফিয়ে উঠতে পারত, তবে হায় আফসোস, এটি পুনরায় চাপ দিচ্ছে বলে মনে হচ্ছে।


4
অন-টার্গেট রেন্টের জন্য +1; আমি এতে প্রতিটি শ্রেণীর সাবক্লাসের অক্ষমতা, মৌলিক শ্রেণির জন্য ইন্টারফেসের অভাব এবং বেশ কয়েক বছর পরেও ফ্রেমওয়ার্ক বাগগুলি ঠিক করতে অনীহা যুক্ত করব
— স্টিভেন এ। লো

4
আমরা যদি তাড়া করে ফেলি, আমরা কি বলছি যে। নেট ফ্রেমওয়ার্কগুলি এতটাই খারাপ যে ঠিক ঠিক যে কোন ত্রুটি সবচেয়ে খারাপ এটির উপর নিষ্পত্তি করা শক্ত? আমি ভেন্টের পরে আরও ভাল বোধ করি এবং উপভোগটির প্রশংসা করি কারণ আমি এমএস ফ্যান ছেলেরা চেঁচিয়ে উঠার প্রত্যাশা করছিলাম।
— ড্যানিয়েল পল

আমি কোনওভাবেই ভোট দিয়েছি না, এবং যাইহোক আমি ডাউন-ভোট প্রদান করতে খুব অনিচ্ছুক, তবে কেন আমি যত্ন নিচ্ছি না তা জানার চেষ্টা করছি।
— মাইক ডুনলাভে

4
আমি মনে করি আপনি বলছেন "এটি যতটা সম্ভব ঠিক তেমন ভাল নয়" যা একটি উত্তর নেই। কোন কিছুই ঠিক নাই. বিশদ সরবরাহ করুন।
— jcollum

4
না, আমি বলছি যে এমন অনেকগুলি দৃষ্টান্ত রয়েছে যেখানে ডিজাইনটি স্পষ্টতই ত্রুটিযুক্ত ছিল, তারপরে আপনি যখন মনে করেন যে তারা এটি সঠিকভাবে পেয়েছে তখনও তারা এটি ভুল করে। উদাহরণস্বরূপ, এমএসডিএন ফোরামে আমার পোস্টটি এখানে: social.msdn.microsoft.com/forums/en-US/wpf/thread/…
— ড্যানিয়েল

11

আমি সি # সুইচ বিবৃতি পছন্দ করি না।

আমি এরকম কিছু চাই

switch (a) {
  1    : do_something;
  2    : do_something_else;
  3,4  : do_something_different;
  else : do_something_weird; 
}

সুতরাং আর বিরতি নেই (ভুলে যাওয়া সহজ) এবং বিভিন্ন মানকে কমা-পৃথক করার সম্ভাবনা।


আসলে আমি মনে করি এটি আরও ভাল হবে যদি এটির জন্য সিঙ্গল-তে থাকা সমস্ত কিছুর মতো কোঁকড়ানো বন্ধনীগুলির মধ্যে একটি বিবৃতি বা ব্লক প্রয়োজন হয় require পড়ার ক্ষমতা ছাড়াই বর্তমান ব্রেক সিনট্যাক্সটি কিছুটা ডজ্বল এবং এটি স্কোপকেও সীমাবদ্ধ করে না। (আফাইক, এটি হয়ত আমি জানি না)
— তমাস সিজনে

তুমি কী বলতে চাচ্ছ আমি বুঝতে পারছি না। আপনার নিজের 'আদর্শ' স্যুইচ স্টেটমেন্টটি এখানে পোস্ট করুন। আমি পড়তে চাই না তবে কমা দ্বারা পৃথক করা মান।
— tuinstoel

8
যাইহোক, আমি ওপির সাথে একমত switchসি এর ইচ্ছাকৃত পঙ্গু সংস্করণ (গতির জন্য অনুকূলিত!) নকল করে এমন সমস্ত ভাষায় মৌলিকভাবে ভাঙা হয়েছে। ভিবি ভাড়া আরও উন্নত, তবে প্যাটার্ন মেলানো (হ্যাস্কেল, এফ #…) সহ ভাষার তুলনায় হালকা বছর রয়েছে।
— কনরাড রুডল্ফ

4
টিউনোস্টেল: সুইচের মতো কিছু (ক) 1 কেস 1 {ডু_সামথিং; } কেস 2 {ডু_সোমথিং_সেলস; }} - এটি, ব্রেক স্টেটমেন্ট থেকে মুক্তি এবং প্রতিটি মামলার জন্য যথাযথ কোড ব্লকগুলির প্রয়োজন
— টমাস সিজনে

4
বিরতি রাখা সাধারণভাবে একটি ভুল বলে মনে হয়, এটি নির্গমন করা কি সংকলন ত্রুটি নয়? এটি কেবলমাত্র সি থেকে সি # তে রূপান্তরটি সহজ করার জন্য উপস্থিত রয়েছে বলে মনে হচ্ছে (ওরফে শিক্ষাদানগুলি যে তারা স্বয়ংক্রিয়ভাবে
— পড়তে

10

সি # তে ইভেন্টগুলি, যেখানে আপনাকে শ্রোতাদের জন্য সুস্পষ্ট চেক করতে হবে। যে ঘটনাটি ঘটেছে, সেখানে উপস্থিত হওয়ার জন্য যারা সম্প্রচার করছিল সেটাই ছিল না? কিছু না থাকলেও?


4
এটি বিরক্তিকর যে যখন আপনি এটি চান তখন এটির জন্য চিনি নেই, আমি দেখি তারা কেন এটি কঠোর করে, এটি প্রয়োজন না হলে ইভেন্টের যুক্তিগুলি তাত্ক্ষণিকভাবে না উত্সাহিত করে
— ShuggyCoUk

এইচএম আমি হয় বুঝতে পারি না বা একমত নই, বা উভয় :-)। আমি বলতে পারি না যে আমি কখনও কোনও কিছু ইনস্ট্যান্ট করতে হতাশ হয়েছি। এটি আমার কাছে অকাল অনুকূলতার মতো গন্ধযুক্ত।
— থমাস আইয়েড

আংশিক পদ্ধতিগুলি একটি কার্যকর বিকল্প, কিছু ক্ষেত্রে।
— রবার্ট হার্ভে

প্লাসটি এই সমস্ত সংশ্লেষের কারণ হয় ... এমএসের সিএবি রয়েছে যা এই দুটি সমস্যাই সংশোধন করে, তবে সি # এর সীমাবদ্ধতার কারণে সিএবির নিজস্ব অনেক সমস্যা রয়েছে (যেমন ইভেন্ট-বিষয়গুলি হিসাবে এনামগুলি বাদ দিয়ে স্ট্রিং) - কেন কেবল আলগাভাবে তৈরি করা যায় না? -কুপোল্ড ইভেন্টস ভাষার অংশ !?
— ব্লুরাজা - ড্যানি পিফ্লুঘুফ্ট

9

নেস্টেড / পুনরাবৃত্ত পুনরাবৃত্তকারীগুলির ঘৃণ্য (এবং বেশিরভাগ লোকের কাছে বেশ অদৃশ্য) ও (এন ^ 2) আচরণ ।

আমি বেশ আগ্রহী যে তারা এ সম্পর্কে জানে, কীভাবে এটি ঠিক করতে হয় তা জানেন তবে এটি যোগ্যতার অন্তর্ভুক্তির পর্যাপ্ত অগ্রাধিকার হিসাবে দেখা হয় না।

আমি গাছের মতো গাছের সাথে সর্বদা কাজ করি এবং অন্যথায় স্মার্ট লোকের কোডটি সংশোধন করতে হয় যখন তারা অজান্তেই এইভাবে অত্যন্ত ব্যয়বহুল ক্রিয়াকলাপগুলি প্রবর্তন করে।

"ফলন ফোরচ" এর সৌন্দর্যটি হ'ল সহজ, সহজ বাক্য গঠন সঠিক, পারফরম্যান্ট কোডকে উত্সাহ দেয় This এটি "সাফল্যের গর্ত" যা আমি মনে করি প্ল্যাটফর্মের দীর্ঘমেয়াদী সাফল্যের জন্য নতুন বৈশিষ্ট্য যুক্ত করার আগে তাদের উত্সাহিত করা উচিত।


এটি বিশেষত ত্রুটিযুক্ত, কারণ এটি হে আচরণের
— উত্তরগুলির

7

কিছু শ্রেণীর উদাহরণস্বরূপ এরে কার্যকরী IList, ইন্টারফেসগুলি বাস্তবায়ন কিন্তু তারা এটি ইন্টারফেসের পদ্ধতির অনেক বাস্তবায়ন না কিন্তু 9 খুঁজে 4 পদ্ধতি নিক্ষেপ NotSupportedException http://msdn.microsoft.com/en-us/library/system.array_members .aspx


ঠিক আছে, আপনি একটি অ্যারেতে উপাদানের সংখ্যা পরিবর্তন করতে পারবেন না, সুতরাং নোটসপোর্টে নিক্ষেপ ছাড়া অ্যাড, ক্লিয়ার, সন্নিবেশ এবং সরান (এট) কিছুই করতে পারে না ... আসলে, আমি আইলিস্টের যে কোনও বাস্তবায়ন প্রত্যাশা করব যা সত্য হিসাবে প্রত্যাবর্তন করবে ইসফিক্সড সাইজ তাদের উপর নিক্ষেপ করবে।
— সিবি

@ সিবি আমার কাছে যে দলটি অনুমেয় হয়েছে তাতে দেরি করেছেন :) তবে অ্যারে যদি "আইলিস্ট" কে সন্তুষ্ট করতে না পারেন তবে কেন এটি কার্যকর করবেন? এটি সলিড নীতিতে এল লঙ্ঘন।
— উইঙ্গারস

7

ইন্টারফেসে স্থির সদস্য এবং নেস্টেড প্রকারগুলি।

এটি বিশেষত কার্যকর যখন ইন্টারফেসের সদস্যের কাছে ইন্টারফেসের সাথে নির্দিষ্ট ( যেমন একটি enum) পরামিতি থাকে । ইন্টারফেস টাইপের এনাম টাইপটি বাসা বাঁধাই ভাল লাগবে।


4
এটি কি আপনার অন্যান্য পরামর্শের মতো?
— আরসিআইএক্স

4
না, এটি একটি সি # ভাষা সম্পর্কে এবং অন্যটি ফ্রেমওয়ার্ক সম্পর্কে। প্রত্যেকেই এই পার্থক্যের বিষয়ে চিন্তা করে না, তাই আমি বলতে পারি যে এটির মধ্যে একটি যা অনুমোদিত তা এবং অন্যটি কী সরবরাহ করা হয় সে সম্পর্কে।
— জে বাজুজি

6

ঘটনার ভয়াবহ বিপজ্জনক ডিফল্ট প্রকৃতি। গ্রাহকরা অপসারণের কারণে আপনি কোনও ইভেন্টটিকে কল করতে এবং অসামঞ্জস্য অবস্থায় থাকতে পারেন তা সত্যই ভয়ঙ্কর। দেখুন জন স্কিট এর এবং এরিক Lippert এর বিষয় আরও পড়ার জন্য চমৎকার নিবন্ধ।


ডিফল্টরূপে ইভেন্টগুলি থ্রেড-নিরাপদ না হলে আমার আপত্তি হবে না (এটি একক থ্রেডেড কোডে পারফরম্যান্স বাড়িয়ে তুলতে পারে); নির্বোধের বিষয়টি হ'ল অ্যাড / অপসারণ ডিফল্টরূপে নিরাপদ তবে কোনও অনুষ্ঠান চালানোর প্রাকৃতিক উপায়টি অনিরাপদ এবং সহজেই নিরাপদ করার কোনও সুযোগ নেই।
— কিওয়ারটি

@ কিওয়ার্টি: স্লিয়ারটি হ'ল বেশ কিছুক্ষণের জন্য, যুক্ত / সরানো লকিং ব্যবহার করবে এবং এখনও থ্রেড-নিরাপদ হবে না।
— সুপারক্যাট

6
  • null সর্বত্র

  • const কোথাও.

  • এপিআইগুলি অসঙ্গত, যেমন একটি অ্যারের রিটার্নকে রূপান্তরিত করে voidতবে StringBufferএকই রিটার্নে কোনও রিটার্নে সংযোজন StringBuffer।

  • সংগ্রহ ইন্টারফেসগুলি অপরিবর্তনীয় ডাটা স্ট্রাকচার সাথে বেমানান, যেমন Addমধ্যে System.Collections.Generic.IList<_>একটি ফলাফল দেখাবে করতে পারবে না।

  • কোনও কাঠামোগত টাইপিং নেই যাতে আপনি ন্যায়বিচারের System.Windows.Media.Effects.SamplingMode.Bilinearপরিবর্তে লেখেন Bilinear।

  • IEnumeratorক্লাস দ্বারা কার্যকর মিউটেবল ইন্টারফেস যখন এটি অপরিবর্তনীয় হওয়া উচিত struct।

  • সমতা ও তুলনা একটি জগাখিচুড়ি আছেন: আপনি পেয়েছেন System.IComparableএবং Equalsকিন্তু তারপর আপনার কাছে পেয়েছেন System.IComparable<_>, System.IEquatable, System.Collections.IComparer, System.Collections.IStructuralComparable, System.Collections.IStructuralEquatable, System.Collections.Generic.IComparerএবং System.Collections.Generic.IEqualityComparer।

  • টিপলসগুলি স্ট্রাক্ট হওয়া উচিত তবে স্ট্রাকগুলি অযথা টেল কল নির্মূলকরণকে বাধা দেয় তাই সর্বাধিক সাধারণ এবং মৌলিক ডেটা ধরণের একটি অপ্রয়োজনীয়ভাবে বরাদ্দ করে এবং স্কেলযোগ্য সমান্তরালতাটিকে ধ্বংস করে destroy


সিএলআর তে কোনও কাঠামোগত টাইপিং নেই, তবে আপনার কাছে মনে হয় স্ট্রাকচারাল টাইপিং টাইপ ইনফারেন্সের সাথে বা রুবি বৈশিষ্ট্যটির সাথে মিশে গেছে যা "চিহ্ন" হিসাবে পরিচিত। স্ট্রাকচারাল টাইপিং যদি সিএলআর ফানক <ইন, বিউল> এবং প্রিডিকেট <int> কে একই ধরণের হিসাবে বিবেচনা করে, বা কমপক্ষে স্পষ্টত রূপান্তরযোগ্য হিসাবে বিবেচনা করে।
— কিওয়ারটি

তুলনার কথা বলছি, তুলনা <টি> ভুলে যাবেন না!
— কিওয়ারটি

@ কিওয়ার্টি আই ওসিএএমএল-তে পলিমারফিক ভেরিয়েন্টের মতো প্রোগ্রামিং ভাষার বৈশিষ্ট্যগুলিকে উল্লেখ করছিলাম। গ্রাফিক্সের প্রসঙ্গে কাঠামোগত টাইপিং কার্যকর হওয়ার জন্য ওক্যামেলের ল্যাবএলজিএল লাইব্রেরিতে অনেক আকর্ষণীয় উদাহরণ রয়েছে। টাইপ অনুমানের সাথে কিছুই করার নেই এবং কেবলমাত্র প্রতীকগুলির সাথে জড়িত।
— জেডি

4
কেউ কীভাবে অপরিবর্তনীয় কাঠামো ব্যবহার করবে IEnumerator?
— সুপারক্যাট

5

এনাম হিসাবে 0 চাঁদনি

enum নিজস্ব চালচলন: http://blogs.msdn.com/abhinaba/archive/2007/01/09/more-peculiarites-of-enum.aspx

এই ভাল উদাহরণ দ্বারা চিত্রিত: http://plus.kaist.ac.kr/~shoh/postgresql/Npgsql/apidocs/Npgsql.NpgsqlParameter संग्रह

আমার পরামর্শ, "@" চিহ্নটি ভাল ব্যবহারের জন্য রাখুন:

পরিবর্তে:

যদি ((myVar এবং MyEnumName.ColorRed)! = 0)

এটা ব্যবহার কর:

যদি ((মাইভার এবং মাইএননাম.কালার রেড)! = @ 0)


4
+1 এনুম জাভা যে কয়েকটি কাজ ঠিকঠাক করেছিল, তার মধ্যে একটি
— ব্লু রাজা - ড্যানি ফ্লুঘুফুট

5

অন্যদের ইতিমধ্যে তৈরি করা ভাল পয়েন্টগুলির দীর্ঘ তালিকায় যুক্ত করতে:

  • DateTime.Now == DateTime.Now বেশিরভাগ ক্ষেত্রে, তবে সব ক্ষেত্রে নয়।

  • Stringযা অপরিবর্তনীয় তার নির্মাণ ও কারসাজির জন্য একগুচ্ছ বিকল্প রয়েছে, তবে StringBuilder(যা পরিবর্তনযোগ্য) তা নয়।

  • Monitor.Enterএবং Monitor.Exitউদাহরণস্বরূপ পদ্ধতিগুলি হওয়া উচিত ছিল, তাই লক করার জন্য কোনও নির্দিষ্ট অবজেক্টটি নতুন করার পরিবর্তে আপনি নতুনটি তৈরি করতে Monitorএবং এতে লক করতে পারেন।

  • ধ্বংসকারীদের কখনও ডেস্ট্রাক্টর নামকরণ করা উচিত ছিল না। ইসিএমএ স্পেক তাদের চূড়ান্ত বলে ডাকে, যা সি ++ জনতার পক্ষে অনেক কম বিভ্রান্তিকর, তবে ভাষার স্পেসিফিকেশন এখনও তাদেরকে ধ্বংসকারী হিসাবে উল্লেখ করে।


4
DateTime.Nowএক বিশ্বের সবচেয়ে সুস্পষ্ট জাতি অবস্থা, কিন্তু + 1 বাকি জন্য
— BlueRaja - ড্যানি Pflughoeft

এটি এতটা নয় যে এটি একটি প্রতিযোগিতার শর্ত, তবে তারা এটি একটি সম্পত্তি হিসাবে তৈরি করেছে। বৈশিষ্ট্যগুলি হ'ল ক্ষেত্রগুলির মতো দেখতে তাই এটি বিস্ময়কর আচরণ আইএমও IM
— ব্রায়ান রাসমুসেন

4
@ ব্রায়ান রাসমুসেন: ডেটটাইম.এখন একটি সম্পত্তি যথাযথভাবে সঠিক, কারণ এটি পড়ার দ্বারা নয়, বাইরের বিষয়গুলির দ্বারা পরিবর্তিত হয়েছে। কেউ যদি সোমারফর্ম.উইথের মতো সম্পত্তি পড়েন এবং তারপরে - ব্যবহারকারী ফর্মটি পুনরায় আকার দেওয়ার পরে - কেউ আবার এটি পড়েন, দ্বিতীয় পঠনের মান আলাদা হবে। যদিও এটি সম্ভব যে প্রথম ডেটটাইম.এখন এটি কার্যকর করতে যথেষ্ট সময় নিতে পারে যে এটি দ্বিতীয় দ্বারা পঠিত মানকে প্রভাবিত করবে, এই জাতীয় প্রভাব অন্য কোনও ক্রিয়াকলাপের থেকে পৃথক হবে না, যার মৃত্যুদন্ড কার্যকর সময় একই সময় নিয়েছিল।
— সুপারক্যাট

4

আমরা যেভাবে সম্পত্তি ব্যবহার করি তা আমাকে মাঝে মাঝে বিরক্ত করে। আমি তাদের জাভা এর getFoo () এবং setFoo () পদ্ধতির সমতুল্য হিসাবে ভাবতে চাই। কিন্তু তারা না।

যদি সম্পত্তি ব্যবহারের নির্দেশিকাগুলি উল্লেখ করে যে সম্পত্তিগুলি কোনও ক্রমে সেট করতে সক্ষম হওয়া উচিত যাতে সিরিয়ালাইজেশন কাজ করতে পারে, তবে সেটার-সেট বৈধতার জন্য তারা অকেজো। আপনি যদি এমন কোনও ব্যাকগ্রাউন্ড থেকে এসে থাকেন যেখানে আপনি কোনও অবজেক্টকে নিজেকে কোনও অবৈধ অবস্থায় যাওয়ার অনুমতি থেকে বিরত রাখতে চান, তবে বৈশিষ্ট্যগুলি আপনার সমাধান নয়। কখনও কখনও আমি জনসাধারণের সদস্যদের চেয়ে কীভাবে উন্নত তা দেখতে ব্যর্থ হই, কারণ আমরা সম্পত্তিতে কী ধরণের জিনিসগুলি করার কথা তা সীমাবদ্ধ ।

সে লক্ষ্যে আমি সর্বদা এক ধরণের আকাঙ্ক্ষা করেছি (এটি বেশিরভাগ সময় এখানে উচ্চস্বরে চিন্তা করেই চলেছে, আমি কেবল একধরনের ইচ্ছুক আমি এই জাতীয় কিছু করতে পারি) যা আমি সম্পত্তি সংশ্লেষকে একরকম প্রসারিত করতে পারি। এরকম কিছু কল্পনা করুন:


private string password;

public string Password
{
    // Called when being set by a deserializer or a persistence
    // framework
    deserialize
    {
       // I could put some backward-compat hacks in here. Like
       // weak passwords are grandfathered in without blowing up
       this.password = value;
    }
    get
    {
       if (Thread.CurrentPrincipal.IsInRole("Administrator"))
       {
           return this.password;
       }
       else
       {
           throw new PermissionException();
       }
    }
    set
    {
       if (MeetsPasswordRequirements(value))
       {
           throw new BlahException();
       }
       this.password = value;
    }
    serialize
    {
        return this.password;
    }
}

আমি নিশ্চিত নই যে এটি দরকারী বা এটির মধ্যে কী কী অ্যাক্সেস রয়েছে তা দেখতে ভাল লাগবে। তবে আমি কেবল চাই যে আমি সম্পত্তিগুলির সাথে আরও বেশি কিছু করতে পারি এবং সত্যিই তাদের পেতে এবং সেট করার পদ্ধতিগুলির মতো আচরণ করি।


4
আমি বিশ্বাস করি যে তারা সিরিয়ালাইজারকে কেবল বৈশিষ্ট্যগুলিতে কল করতে না চাইলে তারা যেমন এরশিয়াল ইন্টারফেস এবং অন্তর্নিহিত কন্সট্রাক্টরকে সেই জাতীয় জিনিসগুলি সরবরাহ করে। কিছুটা বেশি কাজ করার সময় মনে হচ্ছে আপনি ইতিমধ্যে আপনার পদ্ধতিটি দিয়ে বেশিরভাগ কাজটি করে চলেছেন।
— গুভান্তে

4

এক্সটেনশন পদ্ধতিগুলি দুর্দান্ত তবে তারা মিক্সিনসের বিষয়ে সমস্যাগুলি সমাধান করার একটি কুশল উপায় যা আসল মিক্সিনগুলি দিয়ে ক্লিনার সমাধান করা যেতে পারে (আমি কী বলছি তা দেখতে রুবি দেখুন)। তাদের ভাষায় যুক্ত করার একটি দুর্দান্ত উপায় হ'ল জেনারিকদের উত্তরাধিকারের জন্য ব্যবহার করার অনুমতি দেওয়া। এটি আপনাকে একটি দুর্দান্ত অবজেক্ট ওরিয়েন্টেড উপায়ে বিদ্যমান ক্লাসগুলি প্রসারিত করতে দেয়:

public class MyMixin<T> : T
{
    // etc...
}

একটি স্ট্রিং প্রসারিত করতে এটি এটির মতো ব্যবহার করা যেতে পারে:

var newMixin = new MyMixin<string>();

এটি এক্সটেনশন পদ্ধতির তুলনায় অনেক বেশি শক্তিশালী কারণ এটি আপনাকে পদ্ধতিগুলিকে ওভাররাইড করতে দেয়, উদাহরণস্বরূপ এগুলিকে মোড়ানো করতে ভাষার অভ্যন্তরে এওপি-জাতীয় কার্যকারিতা সরবরাহ করে।

ভাড়ার জন্য দুঃখিত :-)


4
আকর্ষণীয়, তবে আমি এক্সটেনশন পদ্ধতি পছন্দ করি। যদি আমি একটি লাইব্রেরি পেয়েছি যাতে স্ট্রিংগুলির জন্য একগুচ্ছ সম্প্রসারণ পদ্ধতি রয়েছে, তবে নতুন স্টাফটি পাওয়ার জন্য আমার সমস্ত স্ট্রিং রেফারেন্স মাইমিক্সিন <স্ট্রিং> এ পরিবর্তন করতে চাই না। এটি একধরনের নাবালিকা, নিশ্চিত, তবে পদ্ধতির স্বচ্ছ সংযোজন হ'ল যা এক্সটেনশন পদ্ধতিগুলি এত সুন্দর করে।
— আরসিআইএক্স

বিটিডাব্লু আপনি কি জানেন যে এটি ইতিমধ্যে কাজ করে?
— আরসিআইএক্স

4
আমি দেখতে পাচ্ছি না যে
— লিনিক্যু

4
@ আরসিআইএক্স: মিক্সিনগুলি এমনভাবে শোনাচ্ছে যেগুলি তারা ভাবেছে যে এক্সটেনশন পদ্ধতিগুলি ব্যবহার করা উচিত। এক্সটেনশন পদ্ধতিগুলিকে অন্তর্ভুক্ত করার ক্ষেত্রে সমস্যাটি হ'ল এর অর্থ হ'ল বাস্তব শ্রেণীর সদস্যদের এক্সটেনশন পদ্ধতির তুলনায় অগ্রাধিকার থাকা দরকার। যদি কোনও এক্সটেনশন পদ্ধতি গ্রাফিক্স.ড্রভপেনালালগ্রাম (পেন পি, পয়েন্ট ভি 1, পয়েন্ট ভি 2, পয়েন্ট ভি 3) সংজ্ঞায়িত করা হয় এবং পরে সিস্টেম-গ্রাফিকগুলিতে একটি ড্র প্যারালেনগ্রাম ফাংশন যুক্ত করা হয় যা বিভিন্ন ক্রমে পয়েন্ট ব্যবহার করে, এক্সটেনশন পদ্ধতিটি ব্যবহার করে কোডটি ভেঙে যাবে সতর্কতা বিটিডাব্লু, এক্সটেনশন পদ্ধতিগুলির জন্য দুটি বিন্দু ব্যবহার করে কোনও সমস্যা হত (যেমন বস্তু..মোথডো ()?)
— সুপারক্যাট

3

মাইক্রোসফ্ট ফ্রেমওয়ার্কে সুস্পষ্ট বাগগুলি ঠিক করবে না এবং হুক সরবরাহ করবে না যাতে শেষ ব্যবহারকারীরা তাদের ঠিক করতে পারেন।

এছাড়াও, বাইনারি-প্যাচ করার কোনও উপায় নেই। রানটাইম সময়ে নেট এক্সিকিউটেবল এবং নেটিক লাইব্রেরিগুলিকে প্যাচিং ছাড়া লোড কলটি (লোড কলটি আটকাতে) ব্যতীত .NET ফ্রেমওয়ার্ক লাইব্রেরির ব্যক্তিগত সংস্করণ নির্দিষ্ট করার কোনও উপায় নেই এবং ILDASM পুনরায় বিতরণযোগ্য নয় তাই আমি স্বয়ংক্রিয় করতে পারি না প্যাচ যাইহোক।


4
আপনার কী সুস্পষ্ট কাঠামো বাগ বোঝাতে চাইছেন?
— রবার্ট রসনি

4
# 1 একটি স্ক্রোলযোগ্য নিয়ন্ত্রণের আংশিক দৃশ্যমান শিশু নিয়ন্ত্রণের উপর ক্লিক করুন। নিয়ন্ত্রণটি মাউসডাউন ইভেন্টটি গ্রহণের আগে ভিউতে স্থানান্তরিত হয়, যার ফলে ক্লিকটি প্রত্যাশার চেয়ে নিয়ন্ত্রণের কোথাও অন্য কোথাও ঘটে। এটি গাছের দৃশ্যের তুলনায় আরও খারাপ, যেখানে এটি একটি টানা অপারেশনও চালিত করে।
— জোশুয়া


3
  • নাল ভেরিয়েবলের উপর একটি এক্সটেনশন পদ্ধতির আবেদন করতে সক্ষম হ'ল তর্কযোগ্য উদাহরণ

    অবজেক্ট a = নাল; a.MyExtMethod (); // এটি কলযোগ্য, ধারণা করুন কোথাও এটি MyExtMethod সংজ্ঞায়িত করেছে

    এটি সুবিধাজনক হতে পারে তবে নাল রেফারেন্স ব্যতিক্রম বিষয়গুলিতে এটি অস্পষ্ট।

  • একটি নামকরণ 'ত্রুটি' System.configration.dll এ "কনফিগারেশন" এর 'সি' মূলধনী করা উচিত।

  • ব্যতিক্রম হ্যান্ডলিং. ব্যতিক্রমটি জোর মতো ধরা বা নিক্ষেপ করা উচিত জাভার মতো, সংকলকটি সংকলনের সময় এটি পরীক্ষা করা উচিত। ব্যবহারকারীদের লক্ষ্য আহ্বানের মধ্যে ব্যতিক্রম তথ্যের জন্য মন্তব্যে নির্ভর করা উচিত নয়।


4
খুব কুশলী, যদিও - আমি পরামিতি পরীক্ষণের ;-p জন্য একটি "ThrowIfNull` এক্সটেনশন পদ্ধতি আছে
— মার্ক Gravell

4
তুমি এটি করতে পারো? উগ্র থ্রোইনফুল এটি আকর্ষণীয় এক্সটেনশন তবে এটি কেবল ভুল বলে মনে হচ্ছে।
— জোশবার্ক

4
সরল সিএলআর-এ আপনি নাল রেফারেন্সে উদাহরণ পদ্ধতিগুলি আহ্বান করতে পারেন এবং যদি পদ্ধতিটি অবজেক্টে বা তার ক্ষেত্রগুলিতে অ্যাক্সেস না করে তবে কলটি নাল রেফারেন্স ব্যতিক্রম ছুঁড়ে না। (আপনি সি # তে এটি করতে পারবেন না কারণ এটি এমনকি ভার্চুয়াল পদ্ধতির জন্য কলভার্ট ব্যবহার করে)
— পপ ক্যাটালিন

7
ব্যতিক্রম জিনিস মৃত ভুল। আপনি যদি কল স্ট্যাকের মধ্যে ফেলে দেওয়া প্রতিটি গডম্যাম ব্যতিক্রম ধরতে চান তবে আপনি দ্রুত ব্যর্থ হতে পারবেন না। তবে আমি চাই যে কোনও নির্দিষ্ট কল এবং এর ফলস্বরূপ কলস্ট্যাকের মধ্যে ফেলে দেওয়া হতে পারে এমন কোনও এবং সমস্ত ব্যতিক্রম চিহ্নিত করা আরও সহজ হয়েছিল ...

4
@ উইল: ব্যতিক্রম হ্যান্ডলিং জাভা এবং। নেট উভয় ক্ষেত্রেই অদ্ভুত, যেহেতু ঘনিষ্ঠভাবে ব্যবহৃত পদ্ধতিটি তিনটি ধারণাকে একত্রে সম্পর্কিত যা কিছুটা সম্পর্কিত তবে কিছুটা অরথোগোনাল: (1) কোন ধরণের জিনিস (গুলি) ভুল হয়েছে (একটি অ্যারে বাধা ত্রুটি, একটি I / O সময়সীমা ইত্যাদি); (২) নির্দিষ্ট কোডের ফলস্বরূপ পদক্ষেপ নেওয়া উচিত কিনা; (৩) সমস্যাটি কোন পর্যায়ে "সমাধান করা" হিসাবে বিবেচনা করা উচিত। একটি রুটিন বিবেচনা করুন যা কোনও আইনিম্যারেবল থেকে পড়া ডেটার সাথে কোনও বস্তুর রূপান্তর করার কথা। সেই আইনিম্যারেবলের প্রসেসিংয়ে যদি ব্যতিক্রম ঘটে তবে কী হবে?
— সুপারক্যাট

3

ফ্রেমওয়ার্কের ভি 1 এর স্ক্যালকম্যান্ডে .Paraters.Add () পদ্ধতিটি মারাত্মকভাবে ডিজাইন করা হয়েছিল - আপনি যদি 0 এর মান (int) দিয়ে কোনও প্যারামিটারে পাস করেন তবে ওভারলোডগুলির মধ্যে একটি মূলত কাজ করবে না - এটি তাদের তৈরি করতে পরিচালিত করে স্ক্যালকমন্ড ক্লাসে .Paraters.AdWithValue () পদ্ধতিটি।


আমি সম্মত, তবে আমি মনে করি আপনি SqlCommand.Paraters.Add () পদ্ধতিটি বোঝেন।
— ম্যাট পিটারসন

3
  1. এর কোনও উপগ্রহ নেই ICollection<T>এবং IList<T>; সর্বনিম্ন, একটি কোভেরিয়েন্ট রিড-ওনলি সংগ্রহের ইন্টারফেস IListSource<out T>(একটি এনুমरेटर, সূচক এবং গণনা সহ) অত্যন্ত কার্যকর হত।
  2. .NET দুর্বল প্রতিনিধিদের সমর্থন করে না । ওয়ার্কআরউন্ডগুলি সর্বোত্তমভাবে আনাড়ি এবং শ্রোতার পক্ষের ওয়ার্কআরউন্ডগুলি আংশিক বিশ্বাসে অসম্ভব (রিফ্লেকশনপ্রেমিশন প্রয়োজন)।
  3. জেনেরিক ইন্টারফেস একীকরণ এমনকি যখন তা বোধগম্য হয় এবং কোনও সমস্যা না করে তখনও এটি নিষিদ্ধ ।
  4. সি ++ এর বিপরীতে, .NET এ কোভেরিয়েন্ট রিটার্নের ধরণের অনুমতি নেই
  5. সমতার জন্য দুটি মানের ধরণের বিটওয়াইজ-তুলনা করা সম্ভব নয়। একটি ক্রিয়ামূলক " অবিচলিত " ডেটা স্ট্রাকচারে, আমি একটি Transform(Sequence<T>, Func<T,T>)ফাংশন লিখছিলাম যা ফাংশনটি একই মান বা অন্য কোনও মান দেয় কিনা তা দ্রুত নির্ধারণ করা দরকার। যদি ফাংশনটি তার / বেশিরভাগ আর্গুমেন্টকে সংশোধন না করে তবে আউটপুট ক্রমটি ইনপুট ক্রম থেকে কিছু / সমস্ত মেমরি ভাগ করতে পারে। কোনও মানের ধরণের টিকে বিটওয়াইজ করার তুলনা করার ক্ষমতা ছাড়াই অনেক ধীর গতির তুলনা অবশ্যই ব্যবহার করা উচিত, যা পারফরম্যান্সকে প্রচণ্ড আঘাত দেয়।
  6. .NET কোনও পারফরম্যান্ট পদ্ধতিতে অ্যাড-হক ইন্টারফেস (গো বা মরিচায় দেওয়া অফারগুলির মতো) সমর্থন করতে সক্ষম বলে মনে হচ্ছে না। শ্রেণিটি স্পষ্টভাবে সেই ইন্টারফেসটি প্রয়োগ করে না এমন সত্ত্বেও এই জাতীয় ইন্টারফেস আপনাকে List<T>অনুমানের IListSource<U>(যেখানে টি: ইউ) কাস্ট করার অনুমতি দেয়। এই কার্যকারিতা সরবরাহ করার জন্য কমপক্ষে তিনটি পৃথক গ্রন্থাগার রয়েছে (স্বতন্ত্রভাবে লিখিত) (পারফরম্যান্সের ত্রুটিগুলি সহ, অবশ্যই - যদি একটি নিখুঁত কাজ সম্ভব হয়, তবে এটি নেট। এ ত্রুটি বলা ভাল হবে না)।
  7. অন্যান্য কর্মক্ষমতা সম্পর্কিত সমস্যা: আইনিমরেটরটির পুনরাবৃত্তির জন্য দুটি ইন্টারফেস কল প্রয়োজন। সরল পদ্ধতি পয়েন্টার (ইন্টারপ্রেট আকারের ওপেন প্রতিনিধি) বা মান-টাইপ করা প্রতিনিধি (ইন্টারপ্রেট * 2) সম্ভব নয়। নির্দিষ্ট আকারের অ্যারেগুলি (স্বেচ্ছাসেবী টাইপের টি) ক্লাসের মধ্যে এম্বেড করা যায় না। কোনও নেই WeakReference<T>(আপনি সহজেই নিজের লেখা লিখতে পারেন তবে এটি অভ্যন্তরীণভাবে কাস্ট ব্যবহার করবে))
  8. অভিন্ন প্রতিনিধি প্রকারগুলি বেমানান বলে বিবেচিত হয়েছে (কোনও প্রকৃত রূপান্তর নয়) আমার জন্য কিছু উপলক্ষে উপদ্রব হয়েছে (যেমন Predicate<T>বনাম Func<T,bool>)। আমি প্রায়শই ইচ্ছে করি যে আমরা ইন্টারফেস এবং প্রতিনিধিদের জন্য কাঠামোগত টাইপিংয়ের সাথে উপাদানগুলির মধ্যে আলগা দম্পতি অর্জন করতে পারতাম , কারণ .NET এ স্বাধীন ইন্টারন্যাশনাল ডিএলএলগুলিতে একই ইন্টারফেসটি প্রয়োগ করা যথেষ্ট নয় - তাদের অবশ্যই একটি তৃতীয়টির সাথে একটি সাধারণ রেফারেন্স শেয়ার করতে হবে ইন্টারফেসটি সংজ্ঞায়িত করে এমন ডিএলএল।
  9. DBNull.Valuenullএকই উদ্দেশ্য সমানভাবে পরিবেশন করা সত্ত্বেও বিদ্যমান ।
  10. সি # এর কোনও নেই ?? = অপারেটর; আপনি লিখতে হবে variable = variable ?? value। আসলে, সি # তে কয়েকটি জায়গা রয়েছে যে অকারণে প্রতিসাম্যের ঘাটতি রয়েছে। উদাহরণস্বরূপ আপনি লিখতে পারেন if (x) y(); else z();(ধনুর্বন্ধনী ছাড়া), তবে আপনি লিখতে পারবেন না try y(); finally z();।
  11. কোনও থ্রেড তৈরি করার সময়, পিতা-মাতার থ্রেড থেকে শিশু থ্রেডটি থ্রেড-স্থানীয় মানের উত্তরাধিকারী হওয়া অসম্ভব। কেবল ছাত্রলীগই এটি সমর্থন করে না, আপনি নিজে নিজে সমস্ত থ্রেড তৈরি না করলে আপনি এটিকে নিজে প্রয়োগ করতে পারবেন না; এমনকি কোনও থ্রেড-তৈরির ইভেন্ট থাকলেও .NET আপনাকে প্রদত্ত থ্রেডের "পিতামাতা" বা "শিশু" বলতে পারে না ।
  12. "দৈর্ঘ্য" এবং "গণনা", বিভিন্ন ডেটা ধরণের জন্য দুটি পৃথক দৈর্ঘ্যের বৈশিষ্ট্য রয়েছে তা একটি সামান্য উপদ্রব is
  13. আমি ডাব্লুপিএফের দুর্বল নকশা সম্পর্কে চিরকাল যেতে পারতাম ... এবং ডাব্লুসিএফ (যদিও কিছু দৃশ্যের জন্য বেশ দরকারী) এছাড়াও মশালায় পূর্ণ। সাধারণভাবে, ছাত্রলীগের অনেক নতুন নতুন সাবলিবারিগুলির স্ফীততা, অদম্যতা এবং সীমিত ডকুমেন্টেশন সেগুলি ব্যবহার করতে আমার অনীহা প্রকাশ করে। নতুন স্টাফগুলির অনেকগুলি অনেক সহজ, ছোট, সহজেই ব্যবহার করতে এবং বুঝতে পারত, আরও আলগাভাবে জোড়ায়, আরও ভাল-ডকুমেন্টেড, বেশি ব্যবহারের ক্ষেত্রে প্রযোজ্য, দ্রুত এবং / বা আরও দৃ strongly়ভাবে টাইপ করা যেতে পারে।
  14. আমি প্রায়শই সম্পত্তি প্রাপ্তি এবং সেটটারগুলির মধ্যে অযথা মিলিত হওয়ার দ্বারা কামড়ে পড়েছি: উত্পন্ন শ্রেণি বা উত্পন্ন ইন্টারফেসে, বেস ক্লাস বা বেস ইন্টারফেসে কেবল একজন গিটার থাকে আপনি কেবল একটি সেটার যুক্ত করতে পারবেন না; আপনি যদি কোনও গেটরকে ওভাররাইড করেন তবে আপনাকে সেটার সংজ্ঞায়িত করার অনুমতি দেওয়া হবে না; এবং আপনি সেটারটিকে ভার্চুয়াল হিসাবে কিন্তু গিটারটি অ-ভার্চুয়াল হিসাবে সংজ্ঞায়িত করতে পারবেন না।

আমি এর সাবসেট সম্পর্কে আপনার সাথে একমত IList<T>, যদিও আমি ব্যবহার করেছি IReadableByIndex<out T>এবং IAppendable<in T>। আপনার অন্যান্য জিনিসগুলির মধ্যে অনেকগুলি হ'ল ঝগড়াটে আমিও এর সাথে একমত হই।
— সুপারক্যাট

এটি আসলেই দীর্ঘ নাম। সম্ভবত আমরা সমঝোতা করতে পারি IListReader<T>;) - আমি "উত্স" শব্দটি "সিঙ্ক" (একটি লেখার জন্য কেবল ইন্টারফেস) এর প্রতিশব্দ হিসাবে ব্যবহার করি।
— কিওয়ারটি

হতে পারে IListSource<in T>বা IReadableList<out T>। বেস ইন্টারফেসের ধরণের পদ্ধতিগুলির মধ্যে এমন পদ্ধতি রয়েছে যা সমস্ত ডেরাইভেটিভগুলিতে বিদ্যমান নেই এর মধ্যে মূল্য থাকতে পারে, যদিও আমি মনে করি যে ইন্টারফেসগুলি কিছুটা বিশেষায়িত করা প্রায়শই ভাল। উদাহরণস্বরূপ, IList<T>কারওর মধ্যে পুনরায় আকার দেওয়ার পদ্ধতি থাকতে পারে যা কাজ করতে পারে বা না পারে এবং একটি IResizableList<T>একই পদ্ধতি প্রয়োগ করে তবে তাদের কাজ করার নিশ্চয়তা দেয়। এই ক্ষেত্রে এমন ক্ষেত্রে কার্যকর হতে পারে যেখানে ক্ষেত্রটি কেবলমাত্র একটি পরিবর্তনীয় তালিকার একমাত্র বিদ্যমান রেফারেন্স, বা একটি অপরিবর্তনীয় ক্ষেত্রে ভাগ করে নেওয়া রেফারেন্স ধারণ করতে পারে।
— সুপারক্যাট

এই জাতীয় ক্ষেত্রে, তালিকার বিষয়বস্তু পরিবর্তন করতে চায় এমন কোডটি এটি কোনও পরিবর্তনীয় প্রকারের কিনা তা যাচাই করবে এবং যদি তা না হয় তবে অপরিবর্তনীয় তালিকার মতো একই আইটেম যুক্ত একটি নতুন পরিবর্তনীয় উদাহরণ তৈরি করে এবং তারপরে এটি ব্যবহার শুরু করে। কোডটি যদি প্রতিটিতে পরিবর্তিত পদ্ধতি ব্যবহার করতে চাইত প্রতিবারই ফিল্ডটি নিয়মিত টাইপস্টাস্ট করতে হয় তবে তা উদ্বেগজনক হবে।
— সুপারক্যাট

@ সুপের্যাট এটি কেবল বিড়ম্বনা কারণ সি # একটি ইন্টারফেস বাস্তবায়িত হয়েছে এবং তা অবিলম্বে এটি ব্যবহার করার জন্য সত্যিকারের সহজ উপায় সরবরাহ করে না। এমএসকে আরও সহজ করার জন্য একটি ভাষা বৈশিষ্ট্য যুক্ত করা উচিত। আমার পছন্দসই কৌশলটি একটি বাধ্যতামূলক অভিব্যক্তি হবে if (rl:(list as IResizableList<T>) != null) rl.Add(...);, তবে অন্যান্য প্রস্তাব রয়েছে। বিভিন্ন সংগ্রহ এবং সংগ্রহের অ্যাডাপ্টারগুলির লেখক হিসাবে, আমাকে যেটা উদ্বেগ দিচ্ছে তা ব্যতিক্রম ছড়িয়ে দেওয়ার প্রচুর ডামি পদ্ধতি লিখছে writing প্রকার সুরক্ষা অনুরাগী হিসাবে, আমি অবৈধ পদ্ধতিতে কল করতে দেওয়া হতে চাই না। ইন্টেলিসেন্সের অনুরাগী, আমি তাদের তালিকাভুক্ত দেখতে চাই না।
— কিওয়ারটি

2

একটা জিনিষ আমার 1.x বন্ধ টিক যখন ব্যবহার ছিল System.Xml.XmlValidatingReader, ValidationEventHandlerএর ValidationEventArgsএক্সপোজ নেই রেখাঙ্কিত XmlSchemaException(অভ্যন্তরীণ চিহ্নিত) যা মত সব দরকারী তথ্য রয়েছে linenumberএবং position। পরিবর্তে আপনি বার্তা স্ট্রিংয়ের সম্পত্তি থেকে এটি পার্স করার বা এটি খনন করতে প্রতিবিম্বটি ব্যবহার করার প্রত্যাশা করছেন। যখন আপনি শেষ ব্যবহারকারীর কাছে আরও স্যানিটাইজড ত্রুটি ফিরিয়ে দিতে চান তখন খুব ভাল হয় না।


1

এটি পছন্দ করবেন না যে আপনি অন্য এনামে একটি এনমের মান ব্যবহার করতে পারবেন না, উদাহরণস্বরূপ:

    enum Colors { white, blue, green, red, black, yellow }

    enum SpecialColors { Colors.blue, Colors.red, Colors.Yellow } 

4
যদিও এটি অর্থবোধ করে না। typeof(Color)! = typeof(SpecialColors)।
— ক্র্ক ওল

10
এটি করা যথেষ্ট সহজ:enum SpecialColors { blue = Colors.blue, red = Colors.red, yellow = Colors.Yellow }
— ট্রিস্টান স্প্যাংলার

0

সুস্পষ্টভাবে টাইপড ভেরিয়েবলগুলি দুর্বল আইএমও প্রয়োগ করা হয়েছিল। আমি জানি লিনক এক্সপ্রেশন নিয়ে কাজ করার সময় আপনার কেবল সত্যই সেগুলি ব্যবহার করা উচিত তবে এটি বিরক্তিকর যে আপনি স্থানীয় আওতার বাইরে এগুলি ঘোষণা করতে পারবেন না।

এমএসডিএন থেকে:

  • ভেরি কেবল তখনই ব্যবহার করা যেতে পারে যখন স্থানীয় ভেরিয়েবল একই বিবৃতিতে ঘোষিত হয় এবং আরম্ভ করা হয়; ভেরিয়েবলটি নাল, বা কোনও পদ্ধতি গোষ্ঠী বা বেনামে ফাংশন দিয়ে আরম্ভ করা যাবে না।
  • শ্রেণীর ক্ষেত্রের ক্ষেত্রে ক্ষেত্রগুলিতে var ব্যবহার করা যাবে না।
  • ভের ব্যবহার করে ঘোষিত চলকগুলি আরম্ভের অভিব্যক্তিটিতে ব্যবহার করা যায় না। অন্য কথায়, এই অভিব্যক্তিটি বৈধ: int i = (i = 20); তবে এই অভিব্যক্তিটি একটি সংকলন-সময় ত্রুটি তৈরি করে: var i = (i = 20);
  • একাধিক সূক্ষ্মভাবে টাইপযুক্ত ভেরিয়েবল একই বিবৃতিতে আরম্ভ করা যাবে না।
  • যদি ভেরি নামের কোনও প্রকারের সুযোগ থাকে, তবে বর্ণ কীওয়ার্ডটি সেই ধরণের নামের সাথে সমাধান করবে এবং স্পষ্টভাবে টাইপ করা স্থানীয় চলক ঘোষণার অংশ হিসাবে বিবেচিত হবে না।

আমার মনে হয় এটির একটি খারাপ বাস্তবায়ন হ'ল তারা এটিকে ভার বলে, তবে এটি বৈকল্পিক হওয়া থেকে অনেক দূরে। পুরো ক্লাসের নাম টাইপ না করার জন্য এটি কেবলমাত্র শর্টহ্যান্ড সিনট্যাক্স (লিনকের সাথে ব্যবহার করা বাদে)


অবশ্যই আনোন প্রকারগুলি (নতুন {...}), স্পষ্টভাবে টাইপ করা হয়নি (ভার)
— মার্ক গ্র্যাভেল

আমি যা পোস্ট করেছি তা কেবল পুনরায় পড়ুন এবং এটি ভুল ছিল। আমি বোঝাতে চেয়েছি
— স্পষ্টভাবে

4
এরিক লিপার্ট ব্যাখ্যা করেছিলেন যে কেন পদ্ধতির বাইরে ভার ব্যবহার করা যায় না, এটি মূলত কারণ এটি সম্ভাবনার একটি ব্ল্যাক বক্স তৈরি করে। ব্লগস.এমএসডিএন
— এরিক্লিপার্ট /

4
ভেরিয়েন্টটি ভেরিয়েন্ট হওয়ার উদ্দেশ্যে নয়! এটি সংক্ষিপ্তভাবে (বিশেষত আননের ধরণের) জন্য। গতিশীল হওয়ার সাথে সাথে উপভোগ করুন ...
— ShuggyCoUk
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.