ক্লাস ব্যবহার করে এমন প্রতিটি ফাইলের সাথে কোডের একটি লাইন যুক্ত না করে আমি কীভাবে সি # তে একটি শ্রেণির নাম রাখি?


88

আমি একটি শ্রেণি নামের জন্য একটি উপনাম তৈরি করতে চাই। নিম্নলিখিত বাক্য গঠন নিখুঁত হবে:

public class LongClassNameOrOneThatContainsVersionsOrDomainSpecificName
{
   ...
}

public class MyName = LongClassNameOrOneThatContainsVersionOrDomainSpecificName;

তবে এটি সংকলন করবে না


উদাহরণ

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

কিছু বিদ্যমান কোড একটি স্থির শ্রেণীর উপস্থিতির উপর নির্ভর করে:

public static class ColorScheme
{
   ...
}

এই রঙিন স্কিমটি আউটলুক 2003 রঙের স্কিম। আমি আউটলুক ২০০ color রঙের স্কিমটি প্রবর্তন করতে চাই, যখন আউটলুক 2003 রঙের স্কিমটি ধরে রেখেছি:

public static class Outlook2003ColorScheme
{
   ...
}

public static class Outlook2007ColorScheme
{
   ...
}

তবে আমি এখনও এই সত্যটির মুখোমুখি হয়েছি যে কোডটি একটি স্ট্যাটিক শ্রেণীর নামকরণের উপর নির্ভর করে ColorScheme। আমার প্রথম চিন্তা নির্মাণ ছিল ColorSchemeবর্গ যে আমি হয় থেকে উত্তরাধিকার লাভ করবে Outlook2003বা Outlook2007:

public static class ColorScheme : Outlook2007ColorScheme
{
}

তবে আপনি স্থির শ্রেণীর কাছ থেকে উত্তরাধিকারী হতে পারবেন না।

আমার পরের চিন্তাটি ছিল স্ট্যাটিক ColorSchemeক্লাস তৈরি করা , কিন্তু মেকিং Outlook2003ColorSchemeএবং Outlook2007ColorSchemeক্লাসগুলি অ স্থির। তারপরে স্ট্যাটিক ColorSchemeশ্রেণিতে একটি স্ট্যাটিক ভেরিয়েবল "সত্য" রঙের স্কিমকে নির্দেশ করতে পারে:

public static class ColorScheme
{
    private static CustomColorScheme = new Outlook2007ColorScheme();
    ...
}

private class CustomColorScheme 
{ 
   ...
}

private class Outlook2008ColorScheme : CustomColorScheme 
{
    ...
}

private class Outlook2003ColorScheme : CustomColorScheme 
{
   ...
}

তবে তার জন্য আমার পাঠ্য স্ট্যাটিক কালারগুলির দ্বারা রচিত একটি শ্রেণিকে অতিরিক্ত মূল্যবান বৈশিষ্ট্যগুলিতে রূপান্তর করতে হবে এবং তারপরে আমার ColorSchemeক্লাসের 30 টি পৃথক সম্পত্তি প্রাপ্তি নিহিত অবজেক্টে নষ্ট হয়ে যেতে হবে।

এটি খুব বেশি টাইপিং।

সুতরাং আমার পরবর্তী চিন্তা ক্লাসের ওরফে ছিল:

public static ColorScheme = Outlook2007ColorScheme;

তবে তা সংকলন করে না।

আমি কীভাবে স্থিত শ্রেণীর অন্য নাম দিয়ে পারি?


আপডেট: কেউ দয়া করে "আপনি সি # তে এটি করতে পারবেন না" উত্তরটি যুক্ত করতে পারেন , তাই আমি এটি গ্রহণযোগ্য উত্তর হিসাবে চিহ্নিত করতে পারি। অন্য যে কেউ একই প্রশ্নের উত্তর চাইছেন তারা এই প্রশ্নটি, গৃহীত উত্তর এবং বেশ কয়েকটি কাজের ক্ষেত্র খুঁজে পাবেন যা দরকারী, বা নাও পারে, দরকারী be

আমি কেবল এই প্রশ্নটি বন্ধ করতে চাই।


আপনি ক্রিসের
উত্তরটিও

4
এটি উত্তর নয়, এটি একটি কর্মচঞ্চল। উত্তরটি হ'ল আপনি পারবেন না - যতক্ষণ না কেউ আশেপাশে আসে এবং এটি করার জন্য প্রকৃত বাক্য গঠন পোস্ট করে না।
ইয়ান বয়ড

4
এখানে যে কারও জন্য, গ্রহণযোগ্য উত্তরটি ভুল কারণ সর্বোচ্চ রেট করা মন্তব্যটি ঠিক ভিএস 2010 এবং ভিএস 2017 সি # প্রকল্পে আমি কাজ করছি fine সম্পূর্ণরূপে যোগ্যতাসম্পন্ন নেমস্পেসটি অবশ্যই উপনামটি সেট আপ করার সময় শ্রেণি নির্দিষ্ট করতে ব্যবহার করতে হবে তবে একবার উপনামটি সেট করার পরে এটি নির্ধারিত স্কোপের মধ্যে কাজ করে।
জে আমেরিকান

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

বিটিডাব্লু, যে কেউ এই জাতীয় কিছু করার চেষ্টা করছে: যদি এই ক্লাসগুলি আপনি সংজ্ঞায়িত করছেন তবে সি # পদ্ধতির একটি সংজ্ঞা দেওয়া interfaceহবে, যা আপনার সমস্ত শ্রেণি প্রয়োগ করে। হিসাবে উল্লেখ chills42 এর উত্তর । তারপরে আপনি একটি "পরিষেবা" বা "ফ্যাক্টরি" সংজ্ঞায়িত করতে পারেন যা বর্তমান পরিস্থিতি (যেমন প্ল্যাটফর্ম / ওএস) বা কোনও কনফিগার ফাইলের উপর নির্ভর করে এমন একটি বস্তু দেয় যা সেই ইন্টারফেস প্রয়োগ করে returns
টুলমেকারস্টেভ

উত্তর:


131

আপনি পারবেন না । পরবর্তী সেরা জিনিস আপনি করতে পারেন না আছে usingযে ফাইল বর্গ ব্যবহার ঘোষণা।

উদাহরণস্বরূপ, আপনি নির্ভরযোগ্য কোডটি আমদানি ওরফে ব্যবহার করে (পরিমাণ হিসাবে typedef) হিসাবে আবার লিখতে পারেন :

using ColorScheme = The.Fully.Qualified.Namespace.Outlook2007ColorScheme;

দুর্ভাগ্যক্রমে এই নামটি ব্যবহার করে এমন প্রতিটি স্কোপ / ফাইলের মধ্যে যেতে হবে।

সুতরাং আমি জানি না এটি আপনার ক্ষেত্রে ব্যবহারিক কিনা।


9
এটি যদি মূল ক্লাস ধারণ করে এমন ফাইলের শীর্ষে যেতে পারে: এটি দুর্দান্ত। তবে usingঅবশ্যই সমস্ত ভাঙা কোডে যুক্ত করতে হবে। এবং এটি মানটিকেও উপেক্ষা করে যে একটি একক উপনাম রয়েছে, যা আমাকে বিদ্যমান ColorSchemeবর্গের সমস্ত ব্যবহারকারীকে একটি নতুন শ্রেণিতে ব্যবহার করতে - কোনও পরিবর্তন ছাড়াই স্যুইচ করতে দেয় । অন্য কথায়: আমি ক্লাসটিকে ColorSchemeঅন্য একটি ক্লাসে عرف করতে চাই ।
আয়ান বয়ড

উত্তমরূপে একই অর্জন এবং উপন্যাস প্রচার করার কোনও উপায় আছে কি? অর্থাত্ মাই ক্লাস প্রসারিত সমস্ত শ্রেণি ক্লাবের পরিবর্তে কালারস্কিম ব্যবহার করতে সক্ষম হবে? ফুল.কুয়ালফায়েড ... কালারস্কিম শুধু মাই ক্লাস উত্স ফাইলে ব্যবহার করে স্টেটমেন্ট যুক্ত করে?
ফ্লোরিয়ান বুরেল

ঠিক আছে, এটা আমার ক্ষেত্রে খুব ব্যবহারিক ছিল। অবশেষে সি # আমার ফাইলের পথ আঁকা বন্ধ করবে।
ElDoRado1239

25

কোডের এই লাইনটি যুক্ত করে আপনি আপনার শ্রেণির জন্য একটি উপাধি তৈরি করতে পারেন:

using Outlook2007ColorScheme = YourNameSpace.ColorScheme;

'কালারস্কিম' নামটি বর্তমান প্রসঙ্গে নেই
ইয়ান বয়ড

7
আপনার ফুলি.কুয়েলিফাইড.নামস্পেস.অফ.ক্লোরস্কেম
জেমি প্যাট

আমি ভেবেছিলাম সি # তে এইভাবে কেবল ওরফে নেমস্পেস (ক্লাস নয়) পারে, যেখানে ভিবি.নেটে আপনি নামের স্থান বা ক্লাস ব্যবহার করে ক্লাস করতে পারবেন Imports। আমি কি ভূল?
নিক

যদি আপনি usingএর নামের স্থানের ভিতরে নির্দেশিকা রাখেন তবে আপনার পুরোপুরি যোগ্য নাম প্রয়োজন নেই , যেমন যখন আপনার নিজের শ্রেণীর একটি এলিফ প্রয়োজন।
এলভেদীন হামজাগিক

12

আপনার প্রয়োজনীয়তার উপর নির্ভর করে আপনি একটি ( কারখানা | সিঙ্গলটন ) চান । ভিত্তিটি এটি তৈরি করা যাতে ক্লায়েন্ট কোডটি জানতে পারে না যে এটি কোন রঙের স্কিম পাচ্ছে। রঙের স্কিমটি যদি অ্যাপ্লিকেশন প্রশস্ত করা উচিত তবে একটি সিঙ্গলটন ভাল হবে। যদি আপনি বিভিন্ন পরিস্থিতিতে একটি ভিন্ন স্কিম ব্যবহার করতে পারেন তবে একটি কারখানার প্যাটার্নটি সম্ভবত এটি যাওয়ার উপায়। যে কোনও উপায়ে, যখন রঙের স্কিমটি পরিবর্তন করা দরকার তখন কোডটি কেবলমাত্র এক জায়গায় পরিবর্তন করতে হবে।

public interface ColorScheme {
    Color TitleBar { get; }
    Color Background{ get; }
    ...
}

public static class ColorSchemeFactory {

    private static ColorScheme scheme = new Outlook2007ColorScheme();

    public static ColorScheme GetColorScheme() { //Add applicable arguments
        return scheme;
    }
}

public class Outlook2003ColorScheme: ColorScheme {
   public Color TitleBar {
       get { return Color.LightBlue; }
   }

    public Color Background {
        get { return Color.Gray; }
    }
}

public class Outlook2007ColorScheme: ColorScheme {
   public Color TitleBar {
       get { return Color.Blue; }
   }

    public Color Background {
        get { return Color.White; }
    }
}

এটি একটি কারখানার কম দেখায় এবং একটি সিঙ্গলটন প্যাটার্নে আরও দুর্বল প্রচেষ্টা। একটি কারখানার সৃষ্টির পদ্ধতিটি প্যারামিটারাইজ করার সম্ভাবনা বেশি থাকে; আপনার মতো আরও কিছু থাকতে হবে: পাবলিক স্ট্যাটিক কালারস্কিম গেটকলারস্কিম (স্ট্রিং ডেস্ক্রিপ্টর);
OwenP

সত্য - মূল ধারণাটি নিশ্চিত করা হয় যে অফিস 2012 কখন প্রকাশিত হবে তার চেয়ে কোডটি কেবলমাত্র 1 জায়গায় পরিবর্তন করতে হবে।
ক্রিস মারাস্তি-জর্জি

4
এটি অবশ্যই কাজ করে, তবে এটি অবশ্যই একটি সাধারণ সমস্যার জন্য একটি উদ্যোগ-ওয়াই সমাধান।
ইয়ান বয়েড

11

আপনি সি # তে কোনও শ্রেণীর নাম উপন্যাস করতে পারবেন না।

এমন কিছু জিনিস আপনি করতে পারেন যা সি # তে কোনও শ্রেণীর নাম বাদ দিচ্ছে না।

তবে আসল প্রশ্নের উত্তর দেওয়ার জন্য: আপনি সি # তে কোনও শ্রেণির নাম ব্যবহার করতে পারবেন না।


আপডেট: লোকেরা বিভ্রান্ত হয় কেন usingকাজ করে না। উদাহরণ:

Form1.cs

private void button1_Click(object sender, EventArgs e)
{
   this.BackColor = ColorScheme.ApplyColorScheme(this.BackColor);
}

কালারসারচেমে.সি

class ColorScheme
{
    public static Color ApplyColorScheme(Color c) { ... }
}

এবং সবকিছু কাজ করে। এখন আমি এটির জন্য একটি নতুন শ্রেণি তৈরি করতে চাই এবং এটির নাম ColorScheme (যাতে কোনও কোড পরিবর্তন করার দরকার নেই ):

কালারসারচেমে.সি

using ColorScheme = Outlook2007ColorScheme;

class Outlook2007ColorScheme
{
    public static Color ApplyColorScheme(Color c) { ... }
}

ওহ, আমি দুঃখিত। এই কোডটি সংকলন করে না:

এখানে চিত্র বর্ণনা লিখুন

আমার প্রশ্ন ছিল কিভাবে সি # তে একটি শ্রেণি উপন্যাস করা যায় । এটা করা যায় না। আমি করতে পারি এমন কিছু জিনিস রয়েছে যা সি # তে কোনও শ্রেণীর নাম বাদ দিচ্ছে না :

  • পরিবর্তে যার উপর নির্ভর করে ColorSchemeতাদের সবাইকে পরিবর্তন করুন using ColorScheme(কোড পরিবর্তন করা হবে কারণ আমি উপনাম করতে পারি না)
  • যারা ColorSchemeএকটি কারখানার প্যাটার্ন তাদের পলিমারফিক ক্লাস বা ইন্টারফেস ব্যবহার করার উপর নির্ভর করে তাদের প্রত্যেককে পরিবর্তন করুন (কোড পরিবর্তন করা হবে কারণ আমি উপনাম করতে পারি না)

তবে এই কাজের ক্ষেত্রগুলি বিদ্যমান কোড ভাঙার সাথে জড়িত: কোনও বিকল্প নয়।

লোকেরা যদি কোনও ColorSchemeশ্রেণীর উপস্থিতির উপর নির্ভর করে তবে আমাকে আসলে কোনও ColorSchemeশ্রেণি অনুলিপি / পেস্ট করতে হবে ।

অন্য কথায়: আমি সি # তে কোনও শ্রেণীর নাম উপস্থাপন করতে পারি না।

এটি অন্যান্য অবজেক্ট ওরিয়েন্টেড ভাষাগুলির সাথে বিপরীতে দেখা যায়, যেখানে আমি নামটির সংজ্ঞা দিতে পারি:

ColorScheme = Outlook2007ColorScheme

এবং আমি সম্পন্ন করা হবে।


22
আপনি একেবারে সি # তে একটি শ্রেণির নাম উলেস করতে পারেন। "<alias_name> = <fully_qualified_name> ব্যবহার করে;"
ক্ল্যামিইউ

8
লাইক @ ক্লেমাহিয়্যু বলেছিলেন, আপনি পুরোপুরি কোনও শ্রেণীর নাম ব্যবহার করতে পারেন, আপনাকে কেবল পুরোপুরি যোগ্যতাসম্পন্ন নামটি ব্যবহার করতে হবে। অতিরিক্ত হিসাবে, যদি আপনার জেনেরিক ক্লাসের বিকল্প হয় তবে আপনাকে জেনেরিক ক্লাস বাছাই করতে হবে। উদাহরণস্বরূপ: শর্টনাম = MyNamespace.SubNamespace.GenericClass <মাইটাইপ> ব্যবহার করে;
ড্যান মরফিস 5:38

11
ডাউনভোট - আপনি বলেছেন "আপনি সি # তে কোনও শ্রেণীর নাম উপন্যাস করতে পারবেন না।" আপনি পারেন। আপনি কি করতে পারবেন না ওরফে ভাবে একটি ক্লাস হয় আপনি চাই - যা বেশ সমর্থনযোগ্য প্রয়োজন, কিন্তু আপনার বিবৃতি ভুল।
টম ডব্লু

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

4
আমি পছন্দ করি আমরা প্রোগ্রামাররা কীভাবে লাইনের মধ্যে আমাদের বক্তব্য রাখব। আয়ান আসলে যা বলছে তা হ'ল সি # বোবা এবং ভাঙ্গা কারণ এটি কোনও সাধারণ বুনিয়াদী কাজ করতে পারে না যা যে কেউ করতে চায় এবং করতে সক্ষম হবে। তিনি সঠিক - নির্দিষ্ট শব্দার্থবিজ্ঞান আপনাকে খুশি করে কিনা whether
IQpierce

10

এটা চেষ্টা কর:

using ColorScheme=[fully qualified].Outlook2007ColorScheme

'কালারস্কিম' নামটি বর্তমান প্রসঙ্গে নেই
ইয়ান বয়ড

4
আপনার দরকার ফুলি.কুয়েলিফায়েড.নামস্পেস.অফ.ক্লোরসার্চেম
জেমি প্যাট

6

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

using aliasClass = Fully.Qualified.Namespace.Example;
//Example being the class in the Fully.Qualified.Namespace

public class Test{

  public void Test_Function(){

    aliasClass.DoStuff();
    //aliasClass here representing the Example class thus aliasing
    //aliasClass will be in scope for all code in my Test.cs file
  }

}

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


যদি আপনি দেখিয়েছেন এই বিষয় আরো পরিষ্কার হবে ঘোষণা অন্যান্য ক্লাসের: namespace Fully.Qualified.Namespace{ public class Example {... public void DoStuff(){... }... } }
টুলমেকারস্টেভ

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

4

আপনি যেভাবে এটি করতে চান তা ছাড়িয়ে দেওয়া সি # তে কাজ করবে না। কারণ এ্যালাইজিং usingনির্দেশের মাধ্যমে করা হয় যা প্রশ্নে ফাইল / নেমস্পেসের মধ্যে সীমাবদ্ধ। যদি আপনার কাছে 50 টি ফাইল থাকে যা পুরাতন শ্রেণীর নাম ব্যবহার করে, এর অর্থ আপডেটের জন্য 50 টি স্থান।

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

অন্য কথায়, এটি করুন:

using CurrentColorScheme = Outlook2007ColorScheme;
public static class ColorScheme
{
   public static Color ApplyColorScheme(Color c)
   {
       return CurrentColorScheme.ApplyColorScheme(c);
   }
   public static Something DoSomethingElse(Param a, Param b)
   {
       return CurrentColorScheme.DoSomethingElse(a, b);
   }
}

তারপরে আপনার কোডের পিছনে, কিছুই পরিবর্তন করুন:

private void button1_Click(object sender, EventArgs e)
{
   this.BackColor = ColorScheme.ApplyColorScheme(this.BackColor);
}

তারপরে আপনি ColorSchemeকোডের একটি লাইন আপডেট করে মানগুলি আপডেট করতে পারেন ( using CurrentColorScheme = Outlook2008ColorScheme;)।

একটি দম্পতি এখানে উদ্বেগ:

  • প্রতিটি নতুন পদ্ধতি বা সম্পত্তির সংজ্ঞাটি তখন ColorSchemeক্লাসে এবং শ্রেণিতে দুটি জায়গায় যুক্ত করা দরকার Outlook2007ColorScheme। এটি অতিরিক্ত কাজ, তবে এটি যদি সত্য লিগ্যাসি কোড হয় তবে এটি ঘন ঘন ঘটনীয় হওয়া উচিত নয়। বোনাস হিসাবে, কোডটি ColorSchemeএত সহজ যে কোনও সম্ভাব্য বাগটি খুব সুস্পষ্ট।
  • স্ট্যাটিক ক্লাসের এই ব্যবহারটি আমার কাছে স্বাভাবিক মনে হয় না; আমি সম্ভবত লিগ্যাসি কোডটিকে অন্যভাবে এটি করার জন্য রিফ্যাক্টর চেষ্টা করব, তবে আমি বুঝতে পারি যে আপনার পরিস্থিতি এটির অনুমতি দেয় না।
  • যদি আপনি ইতিমধ্যে ColorSchemeপ্রতিস্থাপন করছেন এমন কোনও শ্রেণি থাকে তবে এই পদ্ধতি এবং অন্য কোনও সমস্যা হতে পারে। আমি আপনাকে পরামর্শ দেব যে আপনি সেই শ্রেণীর নামকরণের মতো কিছু করুন ColorSchemeOldএবং তারপরে এটি অ্যাক্সেস করুন using CurrentColorScheme = ColorSchemeOld;

3

আমি মনে করি আপনি সবসময় বেস ক্লাস থেকে কিছু যোগ না করে উত্তরাধিকারী হতে পারেন

public class Child : MyReallyReallyLongNamedClass {}

হালনাগাদ

তবে যদি আপনার classনিজের নিজেই পুনঃতীক্ষণ করার ক্ষমতা থাকে : একটি শ্রেণীর নাম সাধারণত অকারণে দীর্ঘায়িত হয় এর অভাবের কারণে namespace

আপনি যদি কেস হিসাবে দেখতে পান ApiLoginUser,DataBaseUser , WebPortalLoginUser, সাধারণত অভাবের লক্ষণ namespaceকারণে ভয় যে নাম Userযথাসাধ্য বিবাদ করছে।

তবে namespaceএক্ষেত্রে আপনি উপনামটি ব্যবহার করতে পারেন আপনি উপরের পোষ্টগুলিতে ইশারা করাতে , যেমন

using LoginApi = MyCompany.Api.Login;
using AuthDB = MyCompany.DataBase.Auth;
using ViewModels = MyCompany.BananasPortal.Models;

// ...
AuthDB.User dbUser;
using ( var ctxt = new AuthDB.AuthContext() )
{
    dbUser = ctxt.Users.Find(userId);
}

var apiUser = new LoginApi.Models.User {
        Username = dbUser.EmailAddess,
        Password = "*****"
    };

LoginApi.UserSession apiUserSession = await LoginApi.Login(apiUser);
var vm = new ViewModels.User(apiUserSession.User.Details);
return View(vm);

classনামগুলি কীভাবে সমস্ত User, তবে আলাদা Notenamespace s পিইপি -20 উদ্ধৃতি : পাইথনের জেন :

নেমস্পেসগুলি হ'ল একটি দুর্দান্ত ধারণা - আসুন আমরা তাদের আরও কিছু করি!

আশাকরি এটা সাহায্য করবে


4
সর্বদা, যদি না আপনি পারেন: উদাহরণস্বরূপ সিল করা ক্লাস
মিকাস

তবে এটি অনেক ক্ষেত্রে কার্যকর হবে না। উদাহরণস্বরূপ পাবলিক ক্লাস মাইলিস্ট: তালিকা {later - যদি আপনি পরে মাইলিস্ট xyz = কিছু চেষ্টা করেন তবে টোললিস্ট (); তুমি আটকে যাবে
অফার

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

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

পুনরায় জন্য সম্পাদনা @Offler জন্য কি আপনি শব্দ বর্ণনা করছেন যে আপনি ইন্টারফেস সহ একটি কারখানা মত somehing প্রয়োজন। IColorScheme oColorScheme = ColorSchemeFactory.Create(); এছাড়াও, আপনি নির্ভরতা ইনজেকশনটি
পেরেসবাস

2

ইন্টারফেস ব্যবহার করে কি পরিবর্তন করা সম্ভব?

সম্ভবত আপনি একটি তৈরি করতে পারে IColorScheme ইন্টারফেস যা ক্লাসগুলির সমস্ত প্রয়োগ করে?

এটি ক্রিস মারাস্তি-জর্জের দেখানো ফ্যাক্টরি ধাঁচের সাথে ভাল কাজ করবে


এটি হতে পারে তবে আমি ক্লাসটির নাম পরিবর্তনের পরিবর্তে এটি ব্যবহার করতে "বর্তমান" রঙিন স্কিমটির চেয়ে বেশি সময় ব্যয় করব না।
ইয়ান বয়ড

0

এটি একটি দেরি করে আংশিক উত্তর - তবে আপনি যদি একই ক্লাস 'কালারস্কিম' একই সংজ্ঞা 'আউটলুক' এ সংজ্ঞায়িত করেন তবে আলাদা সমাবেশে, একটি আউটলুক ২০০৩ এবং অন্য আউটলুক ২০০ called নামে পরিচিত, তবে আপনাকে যা করতে হবে তা হ'ল উপযুক্ত সমাবেশটি উল্লেখ করা ।

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