সি # আংশিক ক্লাস ব্যবহার করা কখন উপযুক্ত?


517

আমি ভাবছিলাম যে কেউ আমাকে কেন সেগুলি ব্যবহার করব এবং প্রক্রিয়াটিতে আমি কী সুবিধা অর্জন করব তার একটি সংক্ষিপ্ত বিবরণ দিতে পারে if


উত্তর:


422

আংশিক শ্রেণীর বৃহত্তম ব্যবহার হ'ল কোড জেনারেটর / ডিজাইনারদের জীবন সহজ করা। আংশিক ক্লাসগুলি জেনারেটরকে সহজেই কোড নির্গত করতে দেয় যা তাদের নির্গত করতে হয় এবং তাদের ফাইলে ব্যবহারকারী সম্পাদনাগুলি মোকাবেলা করতে হবে না। ব্যবহারকারীরা একইভাবে দ্বিতীয় আংশিক শ্রেণীর দ্বারা নতুন সদস্যদের সাথে বর্গটি বেনিফিট করতে পারেন। উদ্বেগের বিভাজনের জন্য এটি খুব পরিষ্কার কাঠামো সরবরাহ করে।

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


70
আংশিক শ্রেণীর আগে জিনিসগুলি কত খারাপ ছিল সে সম্পর্কে আমাকে দুঃস্বপ্ন দেওয়ার জন্য আপনাকে -1 দেওয়ার প্রলোভন দেখায় :)
জন বি

9
@ জন :), আমি মনে করি আমাদের সকলের সেই স্বপ্ন দেখেছিল।
জারেডপাড়

18
একবার আমি একটি কোড জেনারেটর লিখেছিলাম যা ৩K কে-র বেশি লাইন তৈরি করে (বা সম্ভবত আরও অনেক কিছু আমি ঠিক মনে করি না), এবং উত্সটি খোলার সাথে সাথে আমার সম্পাদকদের অবরুদ্ধ করা হয়েছিল। আংশিক ক্লাসগুলি আমাকে 4 গিগাবাইট র‌্যাম ছাড়াই উত্পাদিত কোডটি দেখতে দেয়।
লুকা

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

5
@ গর্ডন - হামারগুর উত্তর আরেকটি যা আমি মনে করি যে এর বিরুদ্ধে তর্ক করা মোটামুটি শক্ত। সি # তে ইন্টারফেস প্রয়োগের জন্য এবং ইন্টারফেসের সদস্যদের ক্লাস-সদস্যদের থেকে স্পষ্ট করে আলাদা রাখার জন্য আংশিক শ্রেণিগুলি খুব সহজ হতে পারে: স্ট্যাকওভারফ্লো
STW

260

আরেকটি ব্যবহার হ'ল বিভিন্ন ইন্টারফেসের প্রয়োগগুলি ভাগ করা, যেমন:

partial class MyClass : IF1, IF2, IF3
{
    // main implementation of MyClass
}


partial class MyClass
{
    // implementation of IF1
}

partial class MyClass
{
    // implementation of IF2
}

6
ভাল যুক্তি! এটি এমন কিছু যা আমি আগে করেছি এবং ভুলে গিয়েছি তবে ইন্টারফেস সদস্যদের স্পষ্টভাবে দৃশ্যমান রাখার জন্য এটি অবশ্যই একটি দুর্দান্ত উপায় (বিশেষত সি # তে, যেহেতু ভিবি.এনইটি Implementsকোনও পদ্ধতিটি একটি ইন্টারফেসের অন্তর্গত বলে বোঝাতে কীওয়ার্ডটি ব্যবহার করে )
এসটিডাব্লু

2
খুব সুন্দর পয়েন্ট, প্রতিটি ইন্টারফেস একটি বিকাশকারী দ্বারা প্রয়োগ করা যেতে পারে, এছাড়াও সহজেই ইন্টারফেসের প্রয়োগ বাস্তবায়ন এটি ভাল উপায়।
কোকবি

3
আইএফ 1, বা আইএফ 2 এর জন্য কোনটি কীভাবে জানতে পারে .. ক্লাস ঘোষণার আদেশে?
কুলদীপ

17
একটি ভাল ব্যবহার কিন্তু একটি খারাপ উদাহরণ। ওহ কেন আপনি একটি আংশিক শ্রেণীর সমস্ত ইন্টারফেস সংজ্ঞায়িত করবেন এবং অন্যান্য আংশিক শ্রেণিতে একই ইন্টারফেস প্রয়োগ করবেন? ..
inkredibl

4
হ্যাঁ, আমি এই প্রশ্নটি কেবলমাত্র আংশিক শ্রেণীর জন্য ইন্টারফেস বাস্তবায়ন পৃথক করার মানক ব্যবহার কিনা তা দেখতে সন্ধান করলাম। অন্যরা এটিকে একটি ভাল ধারণা হিসাবে দেখে তা দেখে আনন্দিত। আমি ইন্টারফেস সংজ্ঞা এটি প্রয়োগকারী আংশিক শ্রেণীর সাথে একত্রে রাখার বিষয়ে @ সংকেতিবল এর সাথে একমত।
কিম

170

অন্য উত্তরগুলি বাদ দিয়ে ...

আমি তাদেরকে godশ্বর-শ্রেণীর রিফ্যাক্টারে স্টেপিং-স্টোন হিসাবে সহায়ক বলে মনে করেছি। যদি কোনও শ্রেণীর একাধিক দায়িত্ব থাকে (বিশেষত এটি যদি খুব বড় কোড-ফাইল হয়) তবে আমি সংগঠনের জন্য প্রথম পাস হিসাবে প্রতি-দায়িত্বের 1x আংশিক শ্রেণি যুক্ত করা এবং তারপরে কোডটিকে পুনরায় ব্যবহার করার পক্ষে সুবিধাজনক বলে মনে করি।

এটি ব্যাপকভাবে সহায়তা করে কারণ এটি সম্পাদনকারী আচরণকে প্রভাবিত না করে কোডটিকে আরও বেশি পঠনযোগ্য করে তুলতে সহায়তা করতে পারে। এটি যখন কোনও দায়বদ্ধতা কার্যকর করা সহজ হয় বা অন্য দিকগুলির সাথে দৃly়ভাবে জড়িয়ে যায় তখন এটি সনাক্ত করতেও সহায়তা করতে পারে can

তবে - ক্লিয়ার হতে - এই এখনও খারাপ কোড, গঠন শেষে আপনি এখনও প্রতি বর্গ (এক দায়িত্ব চান না আংশিক প্রতি ক্লাসে)। এটি কেবল একটি পদক্ষেপ পাথর :)


23
খুব সুন্দর: "... উন্নয়নের শেষে আপনি এখনও প্রতি শ্রেণিতে একটি দায়িত্ব চান ( আংশিক শ্রেণীর প্রতি নয় ) ..."
কোকবি

আমার কাছে এটি কোনও ভাল কোডিং শৈলী নয়, তবে খারাপ কোডগুলি আরও ভাল দেখায়।
থিমফিল্ড

আমি এর সাথে পুরোপুরি একমত এটি খারাপ কোড ঠিক করার পক্ষে একটি ভাল পদক্ষেপ stone Godশ্বর শ্রেণি হ'ল godশ্বর শ্রেণীর আবহাওয়া এটি একাধিক ফাইলগুলিতে ছড়িয়ে পড়েছে বা না।
জিম্বো

84
  1. একাধিক বিকাশকারী আংশিক ক্লাস ব্যবহার করে একাধিক বিকাশকারী একই শ্রেণিতে সহজেই কাজ করতে পারে।
  2. কোড জেনারেটর আংশিক ক্লাসগুলি প্রধানত কোড জেনারেটর দ্বারা বিভিন্ন উদ্বেগকে আলাদা রাখতে ব্যবহৃত হয়
  3. আংশিক পদ্ধতি আংশিক শ্রেণী ব্যবহার করে আপনি আংশিক পদ্ধতিগুলিও সংজ্ঞায়িত করতে পারেন যেখানে কোনও বিকাশকারী সহজভাবে পদ্ধতিটি সংজ্ঞায়িত করতে পারে এবং অন্য বিকাশকারী এটি প্রয়োগ করতে পারে।
  4. আংশিক পদ্ধতি ঘোষণাপত্র এমনকি কোডটি কেবল পদ্ধতি ঘোষণার সাথে সংকলিত হয় এবং যদি পদ্ধতিটির বাস্তবায়ন উপস্থিত না হয় তবে সংকলক নিরাপদে সেই অংশের কোডটি সরিয়ে ফেলতে পারে এবং কোনও সংকলনের সময় ত্রুটি ঘটবে না।

    ৪. পয়েন্ট যাচাই করতে কেবল একটি উইনফর্ম প্রকল্প তৈরি করুন এবং এই লাইনটি ফর্ম 1 কনস্ট্রাক্টরের পরে অন্তর্ভুক্ত করুন এবং কোডটি সংকলনের চেষ্টা করুন

    partial void Ontest(string s);

আংশিক শ্রেণি প্রয়োগের সময় এখানে কয়েকটি বিষয় বিবেচনা করার বিষয় রয়েছে: -

  1. আংশিক শ্রেণীর প্রতিটি অংশে আংশিক কীওয়ার্ড ব্যবহার করুন।
  2. আংশিক শ্রেণীর প্রতিটি অংশের নাম একই হতে হবে তবে আংশিক শ্রেণীর প্রতিটি অংশের উত্স ফাইলের নাম আলাদা হতে পারে।
  3. আংশিক শ্রেণীর সমস্ত অংশ একই নাম স্থানে থাকতে হবে।
  4. আংশিক শ্রেণীর প্রতিটি অংশ একই সমাবেশ বা ডিএলএলে থাকতে হবে, অন্য কথায় আপনি ভিন্ন শ্রেণীর পাঠাগার প্রকল্প থেকে উত্স ফাইলে আংশিক শ্রেণি তৈরি করতে পারবেন না।
  5. আংশিক শ্রেণীর প্রতিটি অংশে একই অ্যাক্সেসযোগ্যতা থাকতে হবে। (যেমন: ব্যক্তিগত, সরকারী বা সুরক্ষিত)
  6. আপনি যদি আংশিক শ্রেণিতে কোনও শ্রেণি বা ইন্টারফেসের উত্তরাধিকারী হন তবে এটি আংশিক শ্রেণীর সমস্ত অংশ দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত।
  7. আংশিক শ্রেণীর কোনও অংশ যদি সিল করা হয় তবে পুরো ক্লাসটি সিল করে দেওয়া হবে।
  8. আংশিক শ্রেণীর কোনও অংশ যদি বিমূর্ত হয় তবে পুরো শ্রেণিকে একটি বিমূর্ত শ্রেণি হিসাবে বিবেচনা করা হবে।

1
সত্তা ফ্রেমওয়ার্ক থেকে তৈরি একটি আংশিক শ্রেণি সম্পাদনা করতে কোনও সমস্যা আছে? আমি টেবিল থেকে তৈরি কিছু শ্রেণীর নাম পরিবর্তন করতে চাই।
মার্সেলো বারবোসা

আমারও একই উদ্বেগ আছে। অ্যান্টিটি ফ্রেমওয়ার্ক একটি কোড প্রথম দৃষ্টিকোণ / দৃষ্টিভঙ্গি / বাস্তবায়ন থেকে আমার ডাটাবেস তৈরিতে প্রয়োজনীয়ভাবে ব্যবহার করবে এমন মডেলগুলি তৈরি করার সময় আংশিক শ্রেণীর যে সুবিধা রয়েছে "যদি তা হয় তবে আমি জানতে চাই" ... আপনার কী আছে।
শেফ_কোড

@JimBalter কল্যাণকামী এই লিঙ্কে মধ্য দিয়ে যেতে msdn.microsoft.com/en-us/library/6b0scde8(v=vs.110).aspx । এতে বলা হয়েছে যে বাস্তবায়ন না হলে উপস্থিত সংকলক কোডের টুকরোটি সরিয়ে ফেলবে এবং কোনও সংকলনের সময় ত্রুটি প্রাপ্ত হবে না।
হেলিওহাব

আপনি যদি আংশিক শ্রেণিতে কোনও শ্রেণি বা ইন্টারফেসের উত্তরাধিকারী হন তবে এটি আংশিক শ্রেণীর সমস্ত অংশ দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত।
লাল মটর

56

একটি দুর্দান্ত ব্যবহার হ'ল লিখিত কোডগুলি থেকে একই শ্রেণীর অন্তর্ভুক্ত থেকে উত্পন্ন কোডকে আলাদা করা।

উদাহরণস্বরূপ যেহেতু লিনকিউ থেকে এসকিউএল আংশিক ক্লাস ব্যবহার করে আপনি কিছু নিজস্ব কার্যকারিতা (যেমন অনেকগুলি থেকে বহু সম্পর্কের জন্য) নিজের প্রয়োগ প্রয়োগ করতে পারেন এবং কোডটি পুনরায় তৈরি করার সময় কাস্টম কোডের সেই অংশগুলি ওভাররাইট হবে না ten

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


21

এটি সত্য যে আংশিক ক্লাসটি অটো কোড জেনারেশনে ব্যবহৃত হয়, একটি ব্যবহার একটি বৃহত শ্রেণির ফাইল বজায় রাখতে পারে যার কোডটিতে হাজার লাইনের থাকতে পারে। আপনি কখনই জানেন না যে আপনার ক্লাসটি 10 ​​হাজার লাইনের সাথে শেষ হতে পারে এবং আপনি আলাদা নামের সাথে একটি নতুন ক্লাস তৈরি করতে চান না।

public partial class Product
{
    // 50 business logic embedded in methods and properties..
}

public partial class Product
{
    // another 50 business logic embedded in methods and properties..
}
//finally compile with product.class file.

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

Product1.cs

public partial class Product
{
    //you are writing the business logic for fast moving product
}

Product2.cs

public partial class Product
{
    // Another developer writing some business logic...
}

আশা করি তা বোধগম্য হয়!


13

আংশিক ক্লাস একাধিক ফাইল বিস্তৃত।

আপনি কীভাবে একটি সি # শ্রেণির ঘোষণায় আংশিক সংশোধক ব্যবহার করতে পারেন?

আংশিক ক্লাসের সাহায্যে আপনি শারীরিকভাবে এক শ্রেণিকে একাধিক ফাইলে আলাদা করতে পারেন। এটি প্রায়শই কোড জেনারেটর দ্বারা করা হয়।

উদাহরণ

সাধারণ সি # ক্লাস সহ, আপনি একই প্রকল্পে দুটি পৃথক ফাইলে কোনও শ্রেণি ঘোষণা করতে পারবেন না। কিন্তু partialপরিবর্তক, আপনি পারেন।

এটি কার্যকর হয় যদি একটি ফাইল সাধারণত সম্পাদিত হয় এবং অন্যটি মেশিন দ্বারা উত্পাদিত হয় বা খুব কমই সম্পাদিত হয়।

স্পষ্ট করার জন্য এখানে একটি উদাহরণ:

class Program
{
    static void Main()
    {
        A.A1();
        A.A2();
    }
}

A1.cs ফাইলের বিষয়বস্তু: সি #

using System;

partial class A
{
    public static void A1()
    {
        Console.WriteLine("A1");
    }
}

A2.cs ফাইলের বিষয়বস্তু: সি #

using System;

partial class A
{
    public static void A2()
    {
        Console.WriteLine("A2");
    }
}

আউটপুট:

A1
A2

আংশিক এখানে প্রয়োজন।

আপনি যদি partialমডিফায়ারটি সরিয়ে ফেলেন তবে আপনি এই পাঠ্যটি সহ একটি ত্রুটি পাবেন:

[নেমস্পেস ' <global namespace>' এ ইতিমধ্যে ' A' এর জন্য একটি সংজ্ঞা রয়েছে ]।

টিপ:

এটির সমাধানের জন্য, আপনি হয় partialকীওয়ার্ডটি ব্যবহার করতে পারেন , বা শ্রেণীর একটি নাম পরিবর্তন করতে পারেন।

সি # সংকলক আংশিক শ্রেণীর সাথে কীভাবে আচরণ করে?

আপনি যদি উপরের প্রোগ্রামটি বিচ্ছিন্ন করে দেন (আইএল ডিসসেসেমব্লার ব্যবহার করে), আপনি দেখতে পাবেন যে ফাইল A1.cs এবং A2.cs মুছে ফেলা হয়েছে। আপনি দেখতে পাবেন যে ক্লাস এ উপস্থিত রয়েছে।

ক্লাস এ একই কোড ব্লকে A1 এবং A2 পদ্ধতিগুলি ধারণ করবে। দুটি শ্রেণি একটিতে একীভূত হয়েছিল।

A1.cs এবং A2.cs এর সংকলিত ফলাফল: সি #

internal class A
{
    // Methods
    public static void A1()
    {
        Console.WriteLine("A1");
    }

    public static void A2()
    {
        Console.WriteLine("A2");
    }
}

সারসংক্ষেপ

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

2
ভাল উদাহরণ এবং ভাল নথিভুক্ত।
শেফ_কোড

1
এটি ইমো অনুসরণ করার সহজতম ব্যাখ্যা।
Yusha

12

বিশাল ক্লাসের সাথে কাজ করার সময়, বা কোনও টিমের সাথে কাজ করার সময়, সমস্ত কিছু যথাসম্ভব পরিচ্ছন্ন রাখুন (আপনি সর্বদা পরিবর্তনগুলি চালিয়ে যাচ্ছেন না)


11

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


8

আপনার যদি পর্যাপ্ত পরিমাণে শ্রেণি থাকে যা কার্যকর রিফ্যাক্টরিংয়ের জন্য নিজেকে ঘৃণা করে না, এটিকে একাধিক ফাইলে বিভক্ত করা বিষয়গুলিকে সংগঠিত রাখতে সহায়তা করে।

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

মাইপ্রোভিডার.সি - মূল যুক্তি

মাইপ্রোভিডার.ফরুম.সি - ফোরামের সাথে সম্পর্কিত বিশেষ পদ্ধতি

মাইপ্রোভিডার.প্রোডাক্ট.সি - পণ্যগুলির জন্য পদ্ধতি

জিনিসগুলিকে সুসংহত রাখার এটি অন্য একটি উপায়।

এছাড়াও, অন্যরা যেমন বলেছে, পরের বার ক্লাসটি পুনর্গঠিত হওয়ার পরে আপনার সংযোজনগুলি ধ্বংস করার ঝুঁকি না চালিয়ে কোনও উত্পন্ন শ্রেণিতে পদ্ধতি যুক্ত করার একমাত্র উপায়। এটি টেমপ্লেট-উত্পাদিত (টি 4) কোড, ওআরএম ইত্যাদির সাহায্যে আসে


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

@ এসটিডব্লিউ: এটি হতে পারে যে অনেকগুলি অবজেক্টের দৃষ্টান্ত তৈরি করা হয় এবং বিভিন্ন কাজের জন্য ব্যবহৃত হয়। বিভিন্ন টাস্ককে বিভিন্ন শ্রেণিতে বিভক্ত করার জন্য ট্র্যাকিংয়ের প্রয়োজন হবে কোন কোন কাজের জন্য কোন দৃষ্টান্তগুলি ব্যবহৃত হয়েছিল - উত্সের মডিউলগুলির মধ্যে কেবল কোডের ব্লকগুলি সরিয়ে রাখার চেয়ে সম্ভাব্য একটি বৃহত্তর উদ্যোগ গ্রহণ।
সুপারক্যাট

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

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

2
ঘটনাক্রমে, আমি আজকাল রোজলিনকে সংশোধন করার চেষ্টা করে ঘুরে বেড়াচ্ছি এবং এটি আংশিক শ্রেণীর ব্যাপক ব্যবহার সহ লেখা হয়েছে। রোজলিনের প্রচুর এবং প্রধান ক্লাসগুলি একাধিক ফাইলে আংশিক শ্রেণি হিসাবে সংজ্ঞায়িত করা হয়। এবং রোজলিন এমন লোকেরা লিখেছিলেন যারা আমি কমপক্ষে খুব চতুর সি # প্রোগ্রামার হিসাবে বিবেচনা করি।
রেনিপেট

8

প্রাক-সংকলক নির্দেশের বিকল্প হিসাবে।

আপনি যদি প্রাক-সংকলক নির্দেশিকা (যথা #IF DEBUG) ব্যবহার করেন তবে আপনি আপনার প্রকৃত প্রকাশের কোডের সাথে মিলিতভাবে কিছু জাঁকজমকপূর্ণ কোডটি শেষ করবেন।

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


মনোগেম এই কৌশলটি ব্যবহার করে।
জাম্বোনি

6

পরিষেবা উল্লেখগুলি অন্য উদাহরণ যেখানে আংশিক শ্রেণিগুলি ব্যবহারকারী-তৈরি কোড থেকে উত্পন্ন কোড পৃথক করতে কার্যকর।

আপনি পরিষেবা রেফারেন্স আপডেট করার সময় পরিষেবা ক্লাসগুলি ওভাররাইট না করেই "প্রসারিত" করতে পারেন।


6

আর একটি ব্যবহার আমি দেখেছি,

ডেটা অ্যাক্সেস যুক্তি সম্পর্কিত একটি বড় বিমূর্ত শ্রেণি প্রসারিত করা,

আমার কাছে পোস্ট.সি.সি., মন্তব্য.সি.স., পেজ.এস.এস. সহ বিভিন্ন ফাইল রয়েছে ...

in Post.cs 

public partial class XMLDAO :BigAbstractClass
{
// CRUD methods of post..
}


in Comment.cs 

public partial class XMLDAO :BigAbstractClass
{
// CRUD methods of comment..
}

in Pages.cs 

public partial class XMLDAO :BigAbstractClass
{
// CRUD methods of Pages..
}

6

বেশিরভাগ লোক মন্তব্য করেন যে partialকেবল এমন একটি শ্রেণীর জন্য ব্যবহার করা উচিত যা উত্পন্ন কোড ফাইল আছে বা ইন্টারফেসের জন্য। আমি দ্বিমত পোষণ করছি, এবং এই কারণেই।

একটি উদাহরণের জন্য, আসুন সি # সিস্টেম.মেথ ক্লাসটি দেখুন ... এটি শ্রেণি । আমি সমস্ত একই সিঙ্গল কোড ফাইলে 70+ পদ্ধতিতে স্টাফ করার চেষ্টা করব না। এটি বজায় রাখা দুঃস্বপ্ন হবে।

প্রতিটি গণিত পদ্ধতি পৃথক আংশিক শ্রেণীর ফাইলগুলিতে এবং সমস্ত কোড ফাইলগুলিকে প্রকল্পের ম্যাথ ফোল্ডারে স্থাপন করা উল্লেখযোগ্যভাবে ক্লিনার সংগঠন হবে।

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

ব্যক্তিগতভাবে, আমি প্রতিটি পদ্ধতি বা পদ্ধতির কার্যকরী গোষ্ঠীর জন্য বেশিরভাগ লোককে "সহায়ক" বা "ইউটিলিটি" ক্লাসগুলি পৃথক আংশিক ফাইলগুলিতে ভাগ করি। উদাহরণস্বরূপ একটি প্রকল্পে স্ট্রিং সহায়ক শ্রেণীর প্রায় 50 টি পদ্ধতি রয়েছে। এমনকি অঞ্চলগুলি ব্যবহার করে এটি একটি দীর্ঘ অযথাযুক্ত কোড ফাইল হবে। প্রতিটি পদ্ধতির জন্য পৃথক আংশিক শ্রেণীর ফাইলগুলি ব্যবহার করা বজায় রাখা উল্লেখযোগ্যভাবে সহজ।

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

মনে রাখবেন যে আপনি যখন কোনও শ্রেণিকে আলাদা আলাদা ফাইলে বিভক্ত করবেন তখন আপনি টেক্সট এডিটর স্প্লিটার বারটি ব্যবহারের ক্ষমতাও হারাবেন যা আপনাকে এক সাথে বর্তমান ফাইলের দুটি পৃথক বিভাগ দেখতে দেয়।


4

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

আংশিক পাবলিক ক্লাস zzFileConverterRegistrar
    ইভেন্ট নিবন্ধক (zZFileConverter হিসাবে বাইওয়াল মেইনকভার্টার)
    সাব রেজিস্ট্রারএল (বাইভাল মেইনকভার্ভারটি zzFileConverter হিসাবে)
        রাইজইভেন্ট রেজিস্টার (মেইন কনভার্টার)
    শেষ সাব
শেষ ক্লাস

প্রতিটি মডিউল যা এক বা একাধিক ধরণের ফাইল কনভার্টারের নিবন্ধন করতে চায় সেগুলির মধ্যে এমন কিছু অন্তর্ভুক্ত থাকতে পারে:

আংশিক পাবলিক ক্লাস zzFileConverterRegistrar
    প্রাইভেট সাব রেজিস্টারজিফ (জেডফাইলে কনভার্টার হিসাবে বাইওয়াল মেইনকভার্টার) আমাকে পরিচালনা করে
        মেইনকনভার্টার.রেজিস্টারকনভার্টার ("জিআইএফ", জিআইএফসিভারভার.নিউফ্যাক্টরি))
    শেষ সাব
শেষ ক্লাস

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

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

আংশিক ক্লাস ব্যবহার না করেই, প্রধান ফাইল রূপান্তরকারী শ্রেণীর মধ্যে কোথাও কিছুটা কোড থাকতে পারে, যা দেখে মনে হয়েছিল:

  রেজিস্টারকনভার্টার ("জিআইএফ", জিআইএফ-কনভার্টার.নিউফ্যাক্টরি)
  রেজিস্টারকনভার্টার ("বিএমপি", বিএমপি কনভার্টর.নিউফ্যাক্টরি)
  রেজিস্টারকনভার্টার ("জেপিইজি", জেপিগ কনভার্টর। নিউ ফ্যাক্টরি)

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


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

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

1
ঝুঁকিটি আপনার লাইনে মোটামুটি রয়েছে "... যদি তারা ... [ব্যতীত ..." বাদে কিছু না করেন তবে সুরক্ষা এবং স্থিতিশীলতা পুরোপুরি বিকাশকারীকে অনুসরণ করে কনভেনশন অনুসরণ করে এবং 0% নিশ্চয়তা প্রদান করে। যদি আপনার ব্যবহারের ক্ষেত্রে সেগুলি সংকলিত করতে হয় (পুরোপুরি বৈধ, কেবল একটি বিবেক ট্রেড অফ হওয়া দরকার) তবে কেন কেবল পৃথক শ্রেণিতে মডিউলগুলি সংজ্ঞায়িত করা হবে না এবং কিছু IModuleইন্টারফেস প্রয়োগ করা হবে ?
এসটিডাব্লু

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

3

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

এই গিটকে ধাক্কা দিয়ে মার্জ সংঘাত সৃষ্টি করে। সম্পূর্ণ পদ্ধতিতে ব্লক হিসাবে নতুন পদ্ধতিগুলি গ্রহণ করার জন্য মার্জ সরঞ্জামটি বলার কোনও উপায় আমি খুঁজে পাইনি।

এই ক্ষেত্রে আংশিক শ্রেণিগুলি বিকাশকারীদের তাদের ফাইলের একটি সংস্করণে আটকে থাকতে দেয় এবং আমরা এগুলি পরে হাতে মার্জ করতে পারি।

উদাহরণ -

  • মেইনক্লাস.সি.এস - ক্ষেত্র, নির্মাতা, ইত্যাদি ধারণ করে
  • MainClass1.cs - বিকাশকারীরা নতুন কোড প্রয়োগ করার সাথে সাথে তাদের প্রয়োগ করে
  • মেইনক্লাস 2 সিএস - তাদের নতুন কোডের জন্য অন্য বিকাশকারী শ্রেণি।

3

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

1. সংকলনের সময়টিতে আংশিক ধরণের সংজ্ঞাগুলির বৈশিষ্ট্যগুলি একত্রিত করা হয়। উদাহরণস্বরূপ, নিম্নলিখিত ঘোষণাগুলি বিবেচনা করুন:

[SerializableAttribute]
partial class Moon { }

[ObsoleteAttribute]
partial class Moon { }

তারা নিম্নলিখিত ঘোষণার সমতুল্য:

[SerializableAttribute]
[ObsoleteAttribute]
class Moon { }

নিম্নলিখিত সমস্ত আংশিক ধরণের সংজ্ঞা থেকে মার্জ করা হয়েছে:

  • এক্সএমএল মন্তব্য

  • ইন্টারফেসগুলি

  • জেনেরিক-ধরণের প্যারামিটার বৈশিষ্ট্য

  • বর্গ বৈশিষ্ট্য

  • সদস্যদের

২. অন্য কোনও বিষয়, নেস্টেড আংশিক ক্লাসগুলিও আংশিক হতে পারে:

partial class ClassWithNestedClass
{
    partial class NestedClass { }
}

partial class ClassWithNestedClass
{
    partial class NestedClass { }
}

1

আংশিক শ্রেণীর সুবিধার কয়েকটি এখানে একটি তালিকা।

আপনি ইউআই ডিজাইনের কোড এবং ব্যবসায়ের লজিক কোড পৃথক করতে পারেন যাতে এটি পড়া এবং বুঝতে সহজ হয়। উদাহরণস্বরূপ আপনি ভিজ্যুয়াল স্টুডিও ব্যবহার করে একটি ওয়েব অ্যাপ্লিকেশন বিকাশ করছেন এবং একটি নতুন ওয়েব ফর্ম যুক্ত করছেন তারপরে দুটি উত্স ফাইল রয়েছে, "এসপিএক্স.সি.এস" এবং "এসপিএক্স.ডিজাইনার.সি"। এই দুটি ফাইলের আংশিক কীওয়ার্ড সহ একই শ্রেণি রয়েছে। ".Aspx.cs" শ্রেণিতে ব্যবসায়ের লজিক কোড রয়েছে এবং "aspx.designer.cs" এর ব্যবহারকারী ইন্টারফেস নিয়ন্ত্রণ সংজ্ঞা রয়েছে।

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

একাধিক বিকাশকারী একসাথে ক্লাসের জন্য কোড লিখতে পারেন।

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


1

যখনই আমার কাছে এমন কোনও ক্লাস রয়েছে যাতে কোনও নেস্টেড ক্লাস থাকে যা কোনও উল্লেখযোগ্য আকার / জটিলতা থাকে, আমি ক্লাসটিকে চিহ্নিত করি partial এবং নেস্টেড শ্রেণিকে একটি পৃথক ফাইলে রাখি। আমি নিয়মটি ব্যবহার করে নেস্টেড শ্রেণিযুক্ত ফাইলটির নাম রাখি: [শ্রেণীর নাম] [[নেস্টেড শ্রেণীর নাম] .সিএস।

নিম্নলিখিত দুটিই MSDN ব্লগে maintainability জন্য নেস্টেড শ্রেণীর সঙ্গে আংশিক শ্রেণীর ব্যবহার ব্যাখ্যা করে: http://blogs.msdn.com/b/marcelolr/archive/2009/04/13/using-partial-classes-with-nested-classes-for- maintainability.aspx


1

আমি জানি এই প্রশ্নটি আসলেই পুরানো তবে আমি আংশিক ক্লাসে আমার যোগ যোগ করতে চাই।

আমি ব্যক্তিগতভাবে আংশিক ক্লাস ব্যবহার করার একটি কারণ হ'ল আমি যখন কোনও প্রোগ্রামের জন্য বাইন্ডিং তৈরি করি, বিশেষত রাষ্ট্রীয় মেশিনগুলি।

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

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


0

আংশিক ক্লাসগুলি প্রাথমিকভাবে কোড জেনারেটরদের সহায়তার জন্য প্রবর্তিত হয়, সুতরাং আমরা (ব্যবহারকারীরা) যতবারই পুনরায় জেনারেট করি, আমাদের সকল কাজ / এএসপি.নেট এর। ডিজাইনার সি ক্লাসের মতো উত্পন্ন শ্রেণিতে পরিবর্তনগুলি শেষ করি না, প্রায় সমস্ত নতুন সরঞ্জাম যা উত্পন্ন করে কোড লিনকিউ, সত্তা ফ্রেমওয়ার্কস, এএসপি.এনইটি উত্পন্ন কোডের জন্য আংশিক ক্লাস ব্যবহার করে, তাই আমরা আংশিক শ্রেণি এবং পদ্ধতিগুলির সুবিধা নিয়ে এই উত্পন্ন কোডগুলির যুক্তিটি নিরাপদে যুক্ত বা পরিবর্তন করতে পারি, তবে আংশিক শ্রেণি ব্যবহার করে উত্পন্ন কোডটিতে স্টাফ যুক্ত করার আগে খুব সাবধানতার সাথে থাকব এটি সহজ যদি আমরা বিল্ডটি ভাঙ্গি তবে সবচেয়ে খারাপ যদি আমরা রানটাইম ত্রুটিগুলি প্রবর্তন করি। আরও তথ্যের জন্য এই http://www.4guysfromrolla.com/articles/071509-1.aspx দেখুন


0

আমি দুটি ব্যবহার নোট করেছি যা আমি উত্তরগুলিতে স্পষ্টভাবে খুঁজে পাইনি।

শ্রেণি আইটেম গোষ্ঠীকরণ

কিছু বিকাশকারী তাদের শ্রেণীর বিভিন্ন "অংশ" আলাদা করতে মন্তব্য ব্যবহার করেন। উদাহরণস্বরূপ, কোনও দল নিম্নলিখিত সম্মেলনটি ব্যবহার করতে পারে:

public class MyClass{  
  //Member variables
  //Constructors
  //Properties
  //Methods
}

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

অন্যান্য উত্তরগুলিতে ইঙ্গিত হিসাবে, এটি শ্রেণিভাগে বিভক্ত হওয়া মূল্যবান কিনা তা সম্ভবত নির্ভর করবে এই ক্ষেত্রে শ্রেণি কত বড় on এটি যদি ছোট হয় তবে একটি মাস্টার ক্লাসে সবকিছু পাওয়া সম্ভবত সহজ। তবে এই বিভাগগুলির মধ্যে যদি কোনওটি খুব বড় হয়ে যায় তবে মাস্টার ক্লাসটি ঝরঝরে রাখতে এর বিষয়বস্তু একটি পৃথক আংশিক শ্রেণিতে স্থানান্তরিত হতে পারে। সেক্ষেত্রে একটি সম্মেলন হতে পারে বিভাগের শিরোনামের পরে "আংশিক শ্রেণি দেখুন" এর মতো কিছু বলার জন্য একটি মন্তব্য দেওয়া:

//Methods - See partial class

বিবৃতি / নেমস্পেস ব্যবহারের সুযোগটি পরিচালনা করা

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


নেমস্পেসের সংঘর্ষের সমাধান করার জন্য বিভিন্ন ব্যবস্থা আছে, উদাহরণস্বরূপ, নেমস্পেস ব্যবহার করে নাম পরিবর্তন করে using Library1 = The.Namespace.You.Needবাglobal::Root.Of.Namespace
fjch1997

হ্যাঁ আমি মনে করি এটি একটি দুর্বল ব্যবহারের ক্ষেত্রে। তবে নামগুলি পুরোপুরি যোগ্যতা অর্জন করতে না পারলে এটি একটু সুন্দর। আংশিক ক্লাস ব্যবহারের কারণের চেয়ে সুন্দর একটি অনিচ্ছাকৃত পার্শ্ব প্রতিক্রিয়া।
কলম ভান্ডাল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.