সি # তে একটি "স্থির পদ্ধতি" কী?


177

আপনি যখন কোনও পদ্ধতিতে স্থির কীওয়ার্ড যুক্ত করেন তার অর্থ কী?

public static void doSomething(){
   //Well, do something!
}

আপনি staticকিওয়ার্ডটি ক্লাসে যুক্ত করতে পারবেন ? এর মানে কি তখন?


9
আপনি কেবল ক্লাস_নাম.স্ট্যাটিক_মোথডো_নাম () দ্বারা সেই শ্রেণীর উদাহরণ তৈরি না করে স্থিতিশীল পদ্ধতি ব্যবহার করতে পারেন;
জাভেদ আকরাম

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

উত্তর:


313

একটি staticফাংশন, একটি নিয়মিত ( উদাহরণস্বরূপ ) ফাংশনের বিপরীতে , শ্রেণীর কোনও ঘটনার সাথে সম্পর্কিত নয়।

একটি staticবর্গ একটি বর্গ যা শুধুমাত্র ধারণ করতে পারে staticসদস্য, এবং সেইজন্য instantiated করা যাবে না।

উদাহরণ স্বরূপ:

class SomeClass {
    public int InstanceMethod() { return 1; }
    public static int StaticMethod() { return 42; }
}

কল করার জন্য InstanceMethod, আপনার ক্লাসের একটি উদাহরণ প্রয়োজন:

SomeClass instance = new SomeClass();
instance.InstanceMethod();   //Fine
instance.StaticMethod();     //Won't compile

SomeClass.InstanceMethod();  //Won't compile
SomeClass.StaticMethod();    //Fine

28
সুতরাং এটি উদাহরণস্বরূপ পদ্ধতির পরিবর্তে কোনও শ্রেণিবদ্ধের মতো?
মোশে

4
@ মোশে: একদম ঠিক। একটি স্থিতিশীল পদ্ধতিতে আপনার ক্লাসের কোনও পদ্ধতির প্রয়োজন নেই, কেবল ক্লাসটি call
বাইনারি ওয়ারিয়ার

3
কিন্তু আসলে কি এমন কোনও প্রযুক্তিগত সীমাবদ্ধতা রয়েছে যা কোনও উদাহরণে স্থিতিশীল পদ্ধতিতে কল আটকায়? সংকলক যদি এটির অনুমতি দেয় তবে এটি অ্যাক্সেসযোগ্য হওয়ার কী বিপদ?
ক্রুনউইজক

2
@ ক্রুন: এটি কোনও অর্থবহ হবে না। দৃষ্টান্ত পদ্ধতিগুলি কেবল একটি লুকানো প্রথম প্যারামিটার হিসাবে একটি উদাহরণ নেয়। স্থির পদ্ধতি না। আমার ব্লগ পোস্টটি দেখুন: blog.slaks.net/2011/06/open-delegates-vs-closed-delegates.html
স্ল্যাक्स

যেখানে "স্ট্যাটিকমেথোদ" ক্লাস পদ্ধতি এবং "ইনস্ট্যান্সমেথোদ" ক্লাস সোমারক্লাসের একটি ইনস্ট্যান্স পদ্ধতি
উসমান ইউনাস

26

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Tools.ToUpperCase("Behnoud Sherafati"));
        Console.ReadKey();
    }
}

public static class Tools
{
    public static string ToUpperCase(string str)
    {
        return str.ToUpper();

    }
}
}

1
"স্ট্রিংয়ে পরিবর্তন করা" ব্যবহার করা একটি খারাপ উদাহরণ - স্ট্রিংগুলি অপরিবর্তনীয় এবং পরিবর্তন করা যায় না। তবে, অন্যথায়, ব্যাখ্যাটি বোঝায় (স্ট্রিংয়ের জন্য একটি অ-পরিবর্তনীয় শ্রেণীর পরিবর্তে)
Flydog57

13

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


5

স্ট্যাটিক ফাংশন বলতে বোঝায় যে এটি ক্লাসের সাথে জড়িত (শ্রেণীর কোনও নির্দিষ্ট উদাহরণ নয় তবে শ্রেণীর নিজেই) এবং কোনও শ্রেণীর উদাহরণ উপস্থিত না থাকলেও এটি চাওয়া যেতে পারে।

স্ট্যাটিক ক্লাস মানে ক্লাসে কেবল স্থির সদস্য থাকে।


5

অচিরেই আপনি স্থির শ্রেণি ইনস্ট্যান্ট করতে পারবেন না: প্রাক্তন:

static class myStaticClass
{
    public static void someFunction()
    { /* */ }
}

আপনি এটি তৈরি করতে পারবেন না:

myStaticClass msc = new myStaticClass();  // it will cause an error

আপনি কেবল তৈরি করতে পারেন:

myStaticClass.someFunction();

0

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


-1

স্ট্যাটিক ভেরিয়েবল ক্লাসের অবজেক্টের সাথে লিঙ্ক করে না। এটি ক্লাসের নাম ব্যবহার করে অ্যাক্সেস করা যায়। শ্রেণীর সমস্ত অবজেক্ট স্ট্যাটিক ভেরিয়েবল ভাগ করে নেবে।

স্থির হিসাবে ফাংশন তৈরি করে, এটি সেই ফাইলের মধ্যে সেই ফাংশনের অ্যাক্সেসকে সীমাবদ্ধ করবে।


-1

এর কোর স্ট্যাটিক শব্দ আপনি কেবলমাত্র একটি কপি থাকবে র্যাম এই (পদ্ধতি / পরিবর্তনশীল / বর্গ) এর যে ভাগ সব কলিং জন্য


-8

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

একটি অ স্থিত শ্রেণীর স্থির পদ্ধতি থাকা এবং এটি প্রায়শই কাঙ্ক্ষিত। উদাহরণস্বরূপ একটি কারখানা পদ্ধতি যখন অন্য শ্রেণীর উদাহরণ তৈরি করে তখন প্রায়শই স্থির হিসাবে ঘোষণা করা হয় কারণ এর অর্থ হ'ল ফ্যাক্টর পদ্ধতিযুক্ত শ্রেণীর একটি নির্দিষ্ট উদাহরণ প্রয়োজন হয় না।

কিভাবে, কখন এবং কোথায় এমএসডিএন দেখুন তার একটি ভাল ব্যাখ্যার জন্য


8
না, কোনও স্থির শ্রেণি কখনই তাত্ক্ষণিক হয় না । এতে থাকা যে সমস্ত কিছু স্থির, আপনি কেন এটি তাত্পর্যপূর্ণ করতে চান ?
জন স্কেটি

1
একটি staticশ্রেণীর কোনও উদাহরণ নেই।
এসএলএক্স

4
দুঃখিত বন্ধুরা, আমি বুঝতে পারি না ... আমি বলেছিলাম একটি একক দৃষ্টান্ত তৈরি হয়েছে এবং আপনি এটি নতুন করতে পারবেন না। অবশ্যই একটি একক, স্থির, উদাহরণ তৈরি করা হয়েছে অন্যথায় কোড কলযোগ্য হবে না?
ডেভ আরকিলে

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

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