আমি ভাবছিলাম যে কেউ আমাকে কেন সেগুলি ব্যবহার করব এবং প্রক্রিয়াটিতে আমি কী সুবিধা অর্জন করব তার একটি সংক্ষিপ্ত বিবরণ দিতে পারে if
আমি ভাবছিলাম যে কেউ আমাকে কেন সেগুলি ব্যবহার করব এবং প্রক্রিয়াটিতে আমি কী সুবিধা অর্জন করব তার একটি সংক্ষিপ্ত বিবরণ দিতে পারে if
উত্তর:
আংশিক শ্রেণীর বৃহত্তম ব্যবহার হ'ল কোড জেনারেটর / ডিজাইনারদের জীবন সহজ করা। আংশিক ক্লাসগুলি জেনারেটরকে সহজেই কোড নির্গত করতে দেয় যা তাদের নির্গত করতে হয় এবং তাদের ফাইলে ব্যবহারকারী সম্পাদনাগুলি মোকাবেলা করতে হবে না। ব্যবহারকারীরা একইভাবে দ্বিতীয় আংশিক শ্রেণীর দ্বারা নতুন সদস্যদের সাথে বর্গটি বেনিফিট করতে পারেন। উদ্বেগের বিভাজনের জন্য এটি খুব পরিষ্কার কাঠামো সরবরাহ করে।
এটি দেখার আরও ভাল উপায় হ'ল আংশিক শ্রেণীর আগে ডিজাইনাররা কীভাবে কাজ করত তা দেখতে পারা। উইনফোর্ডস ডিজাইনার কোডটি সংশোধন না করার বিষয়ে কঠোর কথায় কথায় মন্তব্য দিয়ে একটি অঞ্চলের ভিতরে থাকা সমস্ত কোডই ছড়িয়ে দেবেন। পরবর্তী প্রক্রিয়াকরণের জন্য উত্পন্ন কোডটি খুঁজতে এটি সমস্ত ধরণের হিউরিস্টিক inোকাতে হয়েছিল। এখন এটি কেবল ডিজাইনার। সি ফাইল খুলতে পারে এবং একটি উচ্চ স্তরের আত্মবিশ্বাস থাকতে পারে যে এতে ডিজাইনারের সাথে সম্পর্কিত কেবল কোড রয়েছে।
আরেকটি ব্যবহার হ'ল বিভিন্ন ইন্টারফেসের প্রয়োগগুলি ভাগ করা, যেমন:
partial class MyClass : IF1, IF2, IF3
{
// main implementation of MyClass
}
partial class MyClass
{
// implementation of IF1
}
partial class MyClass
{
// implementation of IF2
}
Implements
কোনও পদ্ধতিটি একটি ইন্টারফেসের অন্তর্গত বলে বোঝাতে কীওয়ার্ডটি ব্যবহার করে )
অন্য উত্তরগুলি বাদ দিয়ে ...
আমি তাদেরকে godশ্বর-শ্রেণীর রিফ্যাক্টারে স্টেপিং-স্টোন হিসাবে সহায়ক বলে মনে করেছি। যদি কোনও শ্রেণীর একাধিক দায়িত্ব থাকে (বিশেষত এটি যদি খুব বড় কোড-ফাইল হয়) তবে আমি সংগঠনের জন্য প্রথম পাস হিসাবে প্রতি-দায়িত্বের 1x আংশিক শ্রেণি যুক্ত করা এবং তারপরে কোডটিকে পুনরায় ব্যবহার করার পক্ষে সুবিধাজনক বলে মনে করি।
এটি ব্যাপকভাবে সহায়তা করে কারণ এটি সম্পাদনকারী আচরণকে প্রভাবিত না করে কোডটিকে আরও বেশি পঠনযোগ্য করে তুলতে সহায়তা করতে পারে। এটি যখন কোনও দায়বদ্ধতা কার্যকর করা সহজ হয় বা অন্য দিকগুলির সাথে দৃly়ভাবে জড়িয়ে যায় তখন এটি সনাক্ত করতেও সহায়তা করতে পারে can
তবে - ক্লিয়ার হতে - এই এখনও খারাপ কোড, গঠন শেষে আপনি এখনও প্রতি বর্গ (এক দায়িত্ব চান না আংশিক প্রতি ক্লাসে)। এটি কেবল একটি পদক্ষেপ পাথর :)
আংশিক পদ্ধতি ঘোষণাপত্র এমনকি কোডটি কেবল পদ্ধতি ঘোষণার সাথে সংকলিত হয় এবং যদি পদ্ধতিটির বাস্তবায়ন উপস্থিত না হয় তবে সংকলক নিরাপদে সেই অংশের কোডটি সরিয়ে ফেলতে পারে এবং কোনও সংকলনের সময় ত্রুটি ঘটবে না।
৪. পয়েন্ট যাচাই করতে কেবল একটি উইনফর্ম প্রকল্প তৈরি করুন এবং এই লাইনটি ফর্ম 1 কনস্ট্রাক্টরের পরে অন্তর্ভুক্ত করুন এবং কোডটি সংকলনের চেষ্টা করুন
partial void Ontest(string s);
আংশিক শ্রেণি প্রয়োগের সময় এখানে কয়েকটি বিষয় বিবেচনা করার বিষয় রয়েছে: -
একটি দুর্দান্ত ব্যবহার হ'ল লিখিত কোডগুলি থেকে একই শ্রেণীর অন্তর্ভুক্ত থেকে উত্পন্ন কোডকে আলাদা করা।
উদাহরণস্বরূপ যেহেতু লিনকিউ থেকে এসকিউএল আংশিক ক্লাস ব্যবহার করে আপনি কিছু নিজস্ব কার্যকারিতা (যেমন অনেকগুলি থেকে বহু সম্পর্কের জন্য) নিজের প্রয়োগ প্রয়োগ করতে পারেন এবং কোডটি পুনরায় তৈরি করার সময় কাস্টম কোডের সেই অংশগুলি ওভাররাইট হবে না ten
উইনফোর্ডস কোডের ক্ষেত্রেও এটি একই রকম। সমস্ত ডিজাইনার উত্পন্ন কোড এমন একটি ফাইলে যায় যা আপনি সাধারণত স্পর্শ করেন না। আপনার হাতে লেখা কোডটি অন্য একটি ফাইলে যায় in এইভাবে, আপনি যখন ডিজাইনারের কোনও জিনিস পরিবর্তন করেন, আপনার পরিবর্তনগুলি প্রস্ফুটিত হয় না।
এটি সত্য যে আংশিক ক্লাসটি অটো কোড জেনারেশনে ব্যবহৃত হয়, একটি ব্যবহার একটি বৃহত শ্রেণির ফাইল বজায় রাখতে পারে যার কোডটিতে হাজার লাইনের থাকতে পারে। আপনি কখনই জানেন না যে আপনার ক্লাসটি 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.
আরেকটি সম্ভাব্য ব্যবহার হতে পারে যে একাধিক বিকাশকারী একই শ্রেণিতে কাজ করতে পারে যেহেতু তারা বিভিন্ন জায়গায় সঞ্চিত থাকে। লোকেরা হাসতে পারে তবে আপনি কখনই জানেন না যে এটি কখনও কখনও হাতের মুঠোয় হতে পারে।
public partial class Product
{
//you are writing the business logic for fast moving product
}
public partial class Product
{
// Another developer writing some business logic...
}
আশা করি তা বোধগম্য হয়!
আংশিক ক্লাস একাধিক ফাইল বিস্তৃত।
আপনি কীভাবে একটি সি # শ্রেণির ঘোষণায় আংশিক সংশোধক ব্যবহার করতে পারেন?
আংশিক ক্লাসের সাহায্যে আপনি শারীরিকভাবে এক শ্রেণিকে একাধিক ফাইলে আলাদা করতে পারেন। এটি প্রায়শই কোড জেনারেটর দ্বারা করা হয়।
উদাহরণ
সাধারণ সি # ক্লাস সহ, আপনি একই প্রকল্পে দুটি পৃথক ফাইলে কোনও শ্রেণি ঘোষণা করতে পারবেন না। কিন্তু 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");
}
}
সারসংক্ষেপ
বিশাল ক্লাসের সাথে কাজ করার সময়, বা কোনও টিমের সাথে কাজ করার সময়, সমস্ত কিছু যথাসম্ভব পরিচ্ছন্ন রাখুন (আপনি সর্বদা পরিবর্তনগুলি চালিয়ে যাচ্ছেন না)
আপনার যদি পর্যাপ্ত পরিমাণে শ্রেণি থাকে যা কার্যকর রিফ্যাক্টরিংয়ের জন্য নিজেকে ঘৃণা করে না, এটিকে একাধিক ফাইলে বিভক্ত করা বিষয়গুলিকে সংগঠিত রাখতে সহায়তা করে।
উদাহরণস্বরূপ, যদি আপনার কাছে আলোচনার ফোরাম এবং একটি পণ্য সিস্টেম সম্বলিত কোনও সাইটের জন্য একটি ডেটাবেস থাকে এবং আপনি দুটি পৃথক সরবরাহকারী শ্রেণি তৈরি করতে চান না (কেবল প্রকট হওয়ার জন্য প্রক্সি ক্লাস হিসাবে একই জিনিস নয়) তবে আপনি করতে পারেন বিভিন্ন ফাইলে একটি একক আংশিক ক্লাস তৈরি করুন
মাইপ্রোভিডার.সি - মূল যুক্তি
মাইপ্রোভিডার.ফরুম.সি - ফোরামের সাথে সম্পর্কিত বিশেষ পদ্ধতি
মাইপ্রোভিডার.প্রোডাক্ট.সি - পণ্যগুলির জন্য পদ্ধতি
জিনিসগুলিকে সুসংহত রাখার এটি অন্য একটি উপায়।
এছাড়াও, অন্যরা যেমন বলেছে, পরের বার ক্লাসটি পুনর্গঠিত হওয়ার পরে আপনার সংযোজনগুলি ধ্বংস করার ঝুঁকি না চালিয়ে কোনও উত্পন্ন শ্রেণিতে পদ্ধতি যুক্ত করার একমাত্র উপায়। এটি টেমপ্লেট-উত্পাদিত (টি 4) কোড, ওআরএম ইত্যাদির সাহায্যে আসে
প্রাক-সংকলক নির্দেশের বিকল্প হিসাবে।
আপনি যদি প্রাক-সংকলক নির্দেশিকা (যথা #IF DEBUG
) ব্যবহার করেন তবে আপনি আপনার প্রকৃত প্রকাশের কোডের সাথে মিলিতভাবে কিছু জাঁকজমকপূর্ণ কোডটি শেষ করবেন।
আপনি এই কোডটি ধারণ করতে একটি পৃথক আংশিক-শ্রেণি তৈরি করতে পারেন, এবং হয় নির্দেশের মধ্যে পুরো আংশিক শ্রেণিটি আবদ্ধ করতে পারেন, বা সেই কোড-ফাইলটি সংকলকটিতে প্রেরণ করা থেকে বাদ দিতে পারেন (কার্যকরভাবে একইভাবে করছেন)।
পরিষেবা উল্লেখগুলি অন্য উদাহরণ যেখানে আংশিক শ্রেণিগুলি ব্যবহারকারী-তৈরি কোড থেকে উত্পন্ন কোড পৃথক করতে কার্যকর।
আপনি পরিষেবা রেফারেন্স আপডেট করার সময় পরিষেবা ক্লাসগুলি ওভাররাইট না করেই "প্রসারিত" করতে পারেন।
আর একটি ব্যবহার আমি দেখেছি,
ডেটা অ্যাক্সেস যুক্তি সম্পর্কিত একটি বড় বিমূর্ত শ্রেণি প্রসারিত করা,
আমার কাছে পোস্ট.সি.সি., মন্তব্য.সি.স., পেজ.এস.এস. সহ বিভিন্ন ফাইল রয়েছে ...
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..
}
বেশিরভাগ লোক মন্তব্য করেন যে partial
কেবল এমন একটি শ্রেণীর জন্য ব্যবহার করা উচিত যা উত্পন্ন কোড ফাইল আছে বা ইন্টারফেসের জন্য। আমি দ্বিমত পোষণ করছি, এবং এই কারণেই।
একটি উদাহরণের জন্য, আসুন সি # সিস্টেম.মেথ ক্লাসটি দেখুন ... এটি শ্রেণি । আমি সমস্ত একই সিঙ্গল কোড ফাইলে 70+ পদ্ধতিতে স্টাফ করার চেষ্টা করব না। এটি বজায় রাখা দুঃস্বপ্ন হবে।
প্রতিটি গণিত পদ্ধতি পৃথক আংশিক শ্রেণীর ফাইলগুলিতে এবং সমস্ত কোড ফাইলগুলিকে প্রকল্পের ম্যাথ ফোল্ডারে স্থাপন করা উল্লেখযোগ্যভাবে ক্লিনার সংগঠন হবে।
একই সাথে অনেকগুলি অন্যান্য শ্রেণীর ক্ষেত্রেও সত্যটি ধরে রাখতে পারে যেগুলিতে প্রচুর পরিমাণে বৈচিত্র্যপূর্ণ কার্যকারিতা রয়েছে। উদাহরণস্বরূপ, প্রাইভেটপ্রফিল এপিআই পরিচালনার জন্য একটি শ্রেণি একক প্রকল্প ফোল্ডারে আংশিক শ্রেণীর ফাইলগুলির একটি পরিষ্কার সেটগুলিতে বিভক্ত হয়ে উপকৃত হতে পারে।
ব্যক্তিগতভাবে, আমি প্রতিটি পদ্ধতি বা পদ্ধতির কার্যকরী গোষ্ঠীর জন্য বেশিরভাগ লোককে "সহায়ক" বা "ইউটিলিটি" ক্লাসগুলি পৃথক আংশিক ফাইলগুলিতে ভাগ করি। উদাহরণস্বরূপ একটি প্রকল্পে স্ট্রিং সহায়ক শ্রেণীর প্রায় 50 টি পদ্ধতি রয়েছে। এমনকি অঞ্চলগুলি ব্যবহার করে এটি একটি দীর্ঘ অযথাযুক্ত কোড ফাইল হবে। প্রতিটি পদ্ধতির জন্য পৃথক আংশিক শ্রেণীর ফাইলগুলি ব্যবহার করা বজায় রাখা উল্লেখযোগ্যভাবে সহজ।
আমি আংশিক ক্লাসগুলি ব্যবহার করে যত্নবান হব এবং এটি করার সময় সমস্ত কোড ফাইল লেআউটটি প্রজেক্ট জুড়ে সামঞ্জস্য রাখব। যেমন যে কোনও শ্রেণীর পাবলিক এনাম এবং শ্রেণি বেসরকারী সদস্যদের ফোল্ডারে একটি সাধারণ.cs বা অনুরূপ নামযুক্ত ফাইলগুলিতে রাখার পরিবর্তে সেগুলি কেবলমাত্র আংশিক ফাইলের মধ্যে সুনির্দিষ্ট না হলে ফাইলগুলিতে ছড়িয়ে দেওয়ার পরিবর্তে across
মনে রাখবেন যে আপনি যখন কোনও শ্রেণিকে আলাদা আলাদা ফাইলে বিভক্ত করবেন তখন আপনি টেক্সট এডিটর স্প্লিটার বারটি ব্যবহারের ক্ষমতাও হারাবেন যা আপনাকে এক সাথে বর্তমান ফাইলের দুটি পৃথক বিভাগ দেখতে দেয়।
আংশিক ক্লাসগুলি কেবল উত্স ফাইল যুক্ত করে উপযুক্ত নকশাকৃত প্রোগ্রামে কার্যকারিতা যুক্ত করা সম্ভব করে তোলে। উদাহরণস্বরূপ, একটি ফাইল-আমদানি প্রোগ্রাম ডিজাইন করা যেতে পারে যাতে কেউ তাদের হ্যান্ডল করে এমন মডিউল যুক্ত করে বিভিন্ন ধরণের পরিচিত ফাইল যুক্ত করতে পারে। উদাহরণস্বরূপ, প্রধান ফাইল টাইপ রূপান্তরকারী একটি ছোট বর্গ অন্তর্ভুক্ত করতে পারে:
আংশিক পাবলিক ক্লাস zzFileConverterRegistrar ইভেন্ট নিবন্ধক (zZFileConverter হিসাবে বাইওয়াল মেইনকভার্টার) সাব রেজিস্ট্রারএল (বাইভাল মেইনকভার্ভারটি zzFileConverter হিসাবে) রাইজইভেন্ট রেজিস্টার (মেইন কনভার্টার) শেষ সাব শেষ ক্লাস
প্রতিটি মডিউল যা এক বা একাধিক ধরণের ফাইল কনভার্টারের নিবন্ধন করতে চায় সেগুলির মধ্যে এমন কিছু অন্তর্ভুক্ত থাকতে পারে:
আংশিক পাবলিক ক্লাস zzFileConverterRegistrar প্রাইভেট সাব রেজিস্টারজিফ (জেডফাইলে কনভার্টার হিসাবে বাইওয়াল মেইনকভার্টার) আমাকে পরিচালনা করে মেইনকনভার্টার.রেজিস্টারকনভার্টার ("জিআইএফ", জিআইএফসিভারভার.নিউফ্যাক্টরি)) শেষ সাব শেষ ক্লাস
নোট করুন যে মূল ফাইল রূপান্তরকারী শ্রেণি "এক্সপোজড" নয় - এটি কেবল সামান্য স্টাব ক্লাসকেই উন্মোচিত করে যা অ্যাড-ইন মডিউলগুলিতে আঁকতে পারে। দ্বন্দ্ব নামকরণের সামান্য ঝুঁকি রয়েছে, তবে প্রতিটি অ্যাড-ইন মডিউলটির "রেজিস্টার" রুটিনের সাথে সম্পর্কিত ফাইলের ধরণ অনুসারে যদি নামকরণ করা হয় তবে তাদের সম্ভবত সমস্যা তৈরি করা উচিত নয়। কেউ যদি এই জাতীয় বিষয়ে উদ্বিগ্ন হন তবে রেজিস্ট্রেশন সাবরুটিনের নামে একটি জিইউইডি আটকে রাখতে পারেন।
সম্পাদনা / সংযোজন স্পষ্টতই, এর উদ্দেশ্য হ'ল এমন একটি উপায় সরবরাহ করা যার মাধ্যমে বিভিন্ন পৃথক শ্রেণীর একটি প্রধান প্রোগ্রাম বা শ্রেণি তাদের সম্পর্কে জানাতে পারে। প্রধান ফাইল রূপান্তরকারীটি zzFileConverterRegistrar এর সাথে একমাত্র কাজটি করবে এটির একটি উদাহরণ তৈরি করে রেজিস্টারএল পদ্ধতিতে কল করুন যা নিবন্ধকের ইভেন্টটিকে আগুন ধরিয়ে দেবে। যে ইভেন্টটি হুক করতে চায় এমন কোনও মডিউল তার প্রতিক্রিয়াতে স্বেচ্ছাসেবীর কোড কার্যকর করতে পারে (এটি পুরো ধারণা) তবে জেডফাইলেভার্টরজিস্টার শ্রেণিটি অন্যায়নের সাথে মেলে এমন কোনও পদ্ধতির সংজ্ঞা দেওয়া ব্যতীত অন্যায়ভাবে কোনও মডিউল কিছুই করতে পারে না isn't । একটি ভুল-লিখিত এক্সটেনশনের পক্ষে অন্য কোনও ভুল-লিখিত এক্সটেনশন ভাঙা অবশ্যই সম্ভব হবে, তবে এর সমাধান হ'ল যে কেউ তার এক্সটেনশনটি কেবল এটি সঠিকভাবে লেখার জন্য নষ্ট করতে চান না।
আংশিক ক্লাস ব্যবহার না করেই, প্রধান ফাইল রূপান্তরকারী শ্রেণীর মধ্যে কোথাও কিছুটা কোড থাকতে পারে, যা দেখে মনে হয়েছিল:
রেজিস্টারকনভার্টার ("জিআইএফ", জিআইএফ-কনভার্টার.নিউফ্যাক্টরি) রেজিস্টারকনভার্টার ("বিএমপি", বিএমপি কনভার্টর.নিউফ্যাক্টরি) রেজিস্টারকনভার্টার ("জেপিইজি", জেপিগ কনভার্টর। নিউ ফ্যাক্টরি)
তবে অন্য রূপান্তরকারী মডিউল যুক্ত করার জন্য রূপান্তরকারী কোডের সেই অংশে প্রবেশ করা এবং তালিকায় নতুন রূপান্তরকারী যুক্ত হওয়া দরকার। আংশিক পদ্ধতি ব্যবহার করে, এটি আর প্রয়োজন নেই - সমস্ত রূপান্তরকারী স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত হবে।
IModule
ইন্টারফেস প্রয়োগ করা হবে ?
IModule
, আপনি এমইএফ (অনেকের মধ্যে একটি) ইত্যাদির মতো একটি প্লাগইন-কাঠামো ব্যবহার করতে পারেন
আংশিক ক্লাসগুলি সম্প্রতি সোর্স নিয়ন্ত্রণে সহায়তা করেছে যেখানে একাধিক বিকাশকারী একটি ফাইলে যুক্ত হচ্ছিল যেখানে ফাইলের একই অংশে নতুন পদ্ধতি যুক্ত করা হয়েছে (পুনরায় ভাগ করে নেওয়া স্বয়ংক্রিয়)।
এই গিটকে ধাক্কা দিয়ে মার্জ সংঘাত সৃষ্টি করে। সম্পূর্ণ পদ্ধতিতে ব্লক হিসাবে নতুন পদ্ধতিগুলি গ্রহণ করার জন্য মার্জ সরঞ্জামটি বলার কোনও উপায় আমি খুঁজে পাইনি।
এই ক্ষেত্রে আংশিক শ্রেণিগুলি বিকাশকারীদের তাদের ফাইলের একটি সংস্করণে আটকে থাকতে দেয় এবং আমরা এগুলি পরে হাতে মার্জ করতে পারি।
উদাহরণ -
এমএসডিএন থেকে :
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 { }
}
আংশিক শ্রেণীর সুবিধার কয়েকটি এখানে একটি তালিকা।
আপনি ইউআই ডিজাইনের কোড এবং ব্যবসায়ের লজিক কোড পৃথক করতে পারেন যাতে এটি পড়া এবং বুঝতে সহজ হয়। উদাহরণস্বরূপ আপনি ভিজ্যুয়াল স্টুডিও ব্যবহার করে একটি ওয়েব অ্যাপ্লিকেশন বিকাশ করছেন এবং একটি নতুন ওয়েব ফর্ম যুক্ত করছেন তারপরে দুটি উত্স ফাইল রয়েছে, "এসপিএক্স.সি.এস" এবং "এসপিএক্স.ডিজাইনার.সি"। এই দুটি ফাইলের আংশিক কীওয়ার্ড সহ একই শ্রেণি রয়েছে। ".Aspx.cs" শ্রেণিতে ব্যবসায়ের লজিক কোড রয়েছে এবং "aspx.designer.cs" এর ব্যবহারকারী ইন্টারফেস নিয়ন্ত্রণ সংজ্ঞা রয়েছে।
স্বয়ংক্রিয়ভাবে উত্পন্ন উত্সের সাথে কাজ করার সময়, উত্স ফাইলটি পুনরায় তৈরি না করেই কোডটি ক্লাসে যুক্ত করা যায়। উদাহরণস্বরূপ আপনি লিনকিউ থেকে এসকিউএল নিয়ে কাজ করছেন এবং একটি ডিবিএমএল ফাইল তৈরি করছেন। এখন আপনি যখন টেবিলটি টেনে আনেন এবং ছাড়েন তখন এটি ডিজাইনার.একগুলিতে একটি আংশিক বর্গ তৈরি করে এবং সমস্ত টেবিল কলামগুলিতে শ্রেণিতে বৈশিষ্ট্য রয়েছে। ইউআই গ্রিডে আবদ্ধ হওয়ার জন্য আপনার এই টেবিলটিতে আরও কলাম প্রয়োজন তবে আপনি ডাটাবেস টেবিলটিতে একটি নতুন কলাম যুক্ত করতে চান না যাতে আপনি এই শ্রেণীর জন্য একটি পৃথক উত্স ফাইল তৈরি করতে পারেন যা column কলামটির জন্য একটি নতুন সম্পত্তি আছে এবং এটি হবে একটি আংশিক বর্গ হতে। সুতরাং এটি ডাটাবেস টেবিল এবং DBML সত্তার মধ্যে থাকা ম্যাপিংকে প্রভাবিত করে তবে আপনি সহজেই একটি অতিরিক্ত ক্ষেত্র পেতে পারেন। এর অর্থ আপনি সিস্টেমটি উত্পন্ন কোডের সাথে গোলযোগ না করে নিজেরাই কোড লিখতে পারেন।
একাধিক বিকাশকারী একসাথে ক্লাসের জন্য কোড লিখতে পারেন।
আপনি বড় ক্লাস সংযোগ দিয়ে আপনার অ্যাপ্লিকেশনটি আরও ভালভাবে বজায় রাখতে পারেন। ধরুন আপনার কাছে এমন একটি শ্রেণি রয়েছে যার একাধিক ইন্টারফেস রয়েছে যাতে আপনি ইন্টারফেস প্রয়োগের উপর নির্ভর করে একাধিক উত্স ফাইল তৈরি করতে পারেন। এটি প্রয়োগ করা একটি ইন্টারফেস বোঝা এবং বজায় রাখা সহজ যার ভিত্তিতে উত্স ফাইলটির একটি আংশিক বর্গ রয়েছে।
যখনই আমার কাছে এমন কোনও ক্লাস রয়েছে যাতে কোনও নেস্টেড ক্লাস থাকে যা কোনও উল্লেখযোগ্য আকার / জটিলতা থাকে, আমি ক্লাসটিকে চিহ্নিত করি partial
এবং নেস্টেড শ্রেণিকে একটি পৃথক ফাইলে রাখি। আমি নিয়মটি ব্যবহার করে নেস্টেড শ্রেণিযুক্ত ফাইলটির নাম রাখি: [শ্রেণীর নাম] [[নেস্টেড শ্রেণীর নাম] .সিএস।
নিম্নলিখিত দুটিই MSDN ব্লগে maintainability জন্য নেস্টেড শ্রেণীর সঙ্গে আংশিক শ্রেণীর ব্যবহার ব্যাখ্যা করে: http://blogs.msdn.com/b/marcelolr/archive/2009/04/13/using-partial-classes-with-nested-classes-for- maintainability.aspx
আমি জানি এই প্রশ্নটি আসলেই পুরানো তবে আমি আংশিক ক্লাসে আমার যোগ যোগ করতে চাই।
আমি ব্যক্তিগতভাবে আংশিক ক্লাস ব্যবহার করার একটি কারণ হ'ল আমি যখন কোনও প্রোগ্রামের জন্য বাইন্ডিং তৈরি করি, বিশেষত রাষ্ট্রীয় মেশিনগুলি।
উদাহরণস্বরূপ, ওপেনজিএল একটি রাষ্ট্রীয় মেশিন, সেখানে স্তূপ রয়েছে অনেকগুলি পদ্ধতির রয়েছে যা সমস্ত বিশ্বব্যাপী পরিবর্তিত হতে পারে, তবে আমার অভিজ্ঞতায় ওপেনজিএলের অনুরূপ কিছু বাঁধাই যেখানে অনেকগুলি পদ্ধতি রয়েছে, শ্রেণিটি খুব সহজেই 10 কে এলওসি ছাড়িয়ে যেতে পারে।
আংশিক ক্লাসগুলি আমার জন্য এটি ভেঙে দেবে এবং দ্রুত পদ্ধতিগুলি অনুসন্ধানে আমাকে সহায়তা করবে।
আংশিক ক্লাসগুলি প্রাথমিকভাবে কোড জেনারেটরদের সহায়তার জন্য প্রবর্তিত হয়, সুতরাং আমরা (ব্যবহারকারীরা) যতবারই পুনরায় জেনারেট করি, আমাদের সকল কাজ / এএসপি.নেট এর। ডিজাইনার সি ক্লাসের মতো উত্পন্ন শ্রেণিতে পরিবর্তনগুলি শেষ করি না, প্রায় সমস্ত নতুন সরঞ্জাম যা উত্পন্ন করে কোড লিনকিউ, সত্তা ফ্রেমওয়ার্কস, এএসপি.এনইটি উত্পন্ন কোডের জন্য আংশিক ক্লাস ব্যবহার করে, তাই আমরা আংশিক শ্রেণি এবং পদ্ধতিগুলির সুবিধা নিয়ে এই উত্পন্ন কোডগুলির যুক্তিটি নিরাপদে যুক্ত বা পরিবর্তন করতে পারি, তবে আংশিক শ্রেণি ব্যবহার করে উত্পন্ন কোডটিতে স্টাফ যুক্ত করার আগে খুব সাবধানতার সাথে থাকব এটি সহজ যদি আমরা বিল্ডটি ভাঙ্গি তবে সবচেয়ে খারাপ যদি আমরা রানটাইম ত্রুটিগুলি প্রবর্তন করি। আরও তথ্যের জন্য এই http://www.4guysfromrolla.com/articles/071509-1.aspx দেখুন
আমি দুটি ব্যবহার নোট করেছি যা আমি উত্তরগুলিতে স্পষ্টভাবে খুঁজে পাইনি।
কিছু বিকাশকারী তাদের শ্রেণীর বিভিন্ন "অংশ" আলাদা করতে মন্তব্য ব্যবহার করেন। উদাহরণস্বরূপ, কোনও দল নিম্নলিখিত সম্মেলনটি ব্যবহার করতে পারে:
public class MyClass{
//Member variables
//Constructors
//Properties
//Methods
}
আংশিক ক্লাসের সাহায্যে আমরা আরও একধাপ এগিয়ে যেতে পারি এবং বিভাগগুলি পৃথক ফাইলে বিভক্ত করতে পারি। একটি কনভেনশন হিসাবে, একটি দল প্রতিটি ফাইলের সাথে সংশ্লিষ্ট বিভাগের সাথে প্রত্যয়ী হতে পারে। সুতরাং উপরেরটিতে আমাদের মতো কিছু থাকবে: মাইক্লাসমেমবার্স.সি, মাইক্লাসকন্সট্রাক্টর.এস, মাইক্লাসপ্রোপারটিসি সি, মাই ক্লাসমেথডস.সি।
অন্যান্য উত্তরগুলিতে ইঙ্গিত হিসাবে, এটি শ্রেণিভাগে বিভক্ত হওয়া মূল্যবান কিনা তা সম্ভবত নির্ভর করবে এই ক্ষেত্রে শ্রেণি কত বড় on এটি যদি ছোট হয় তবে একটি মাস্টার ক্লাসে সবকিছু পাওয়া সম্ভবত সহজ। তবে এই বিভাগগুলির মধ্যে যদি কোনওটি খুব বড় হয়ে যায় তবে মাস্টার ক্লাসটি ঝরঝরে রাখতে এর বিষয়বস্তু একটি পৃথক আংশিক শ্রেণিতে স্থানান্তরিত হতে পারে। সেক্ষেত্রে একটি সম্মেলন হতে পারে বিভাগের শিরোনামের পরে "আংশিক শ্রেণি দেখুন" এর মতো কিছু বলার জন্য একটি মন্তব্য দেওয়া:
//Methods - See partial class
এটি সম্ভবত একটি বিরল ঘটনা, তবে আপনি যে লাইব্রেরি ব্যবহার করতে চান তা দুটি ফাংশনের মধ্যে একটি নেমস্পেস সংঘর্ষ হতে পারে। একটি একক ক্লাসে, আপনি সর্বাধিক এর মধ্যে একটির জন্য একটি ক্লজ ব্যবহার করতে পারেন। অন্যটির জন্য আপনার পুরোপুরি যোগ্যতাসম্পন্ন নাম বা একটি নাম প্রয়োজন need আংশিক শ্রেণীর সাথে, যেহেতু প্রতিটি নেমস্পেস এবং বিবৃতি তালিকা ব্যবহার করা পৃথক, এক দুটি ফাংশনের দুটি সেটকে পৃথক দুটি ফাইলে আলাদা করতে পারে।
using Library1 = The.Namespace.You.Need
বাglobal::Root.Of.Namespace