C # статичний клас чому використовувати?

Possible Duplicate:
When to Use Static Classes in C#

Я встановлюю свої класи як статичні багато, але я не впевнений, коли використовувати статичний чи ні, або в чому полягає різниця, яку вона робить для її використання чи ні.

може хто-небудь пояснити, будь ласка?

18
@Yahia: схема Синглтона з статичними класами? Я так не думаю.
додано Автор BoltClock, джерело
Статичні класи/методи, наприклад, корисні для реалізації шаблону Singleton і Factory шаблону ...
додано Автор Yahia, джерело
@BoltClock ЯКЩО ви уважно прочитали, я написав "статичні класи/методи", і я впевнений, що статичні методи корисні при впровадженні шаблону Синглтона ...
додано Автор Yahia, джерело

3 Відповіді

Створення класу статичний просто запобігає тому, щоб люди намагалися зробити його екземпляр. Якщо у вашому класі є статичні члени, це хороша практика, щоб зробити клас статичним.

29
додано
Це не дозволить людям спробувати продемонструвати його
додано Автор Dylan Smith, джерело
Чому це хороша практика зробити клас статичним, якщо всі учасники є статичними? Якою буде перевага, роблячи сам клас статичним?
додано Автор Mayur Dhingra, джерело
Але для цього ви можете оголосити приватного конструктора і зробити клас Синглтон. Наскільки я знаю, статичний клас завжди залишатиметься у пам'яті, створюючи накладні, але звичайні одиночні класи не будуть.
додано Автор Mayur Dhingra, джерело

Якщо клас оголошений як статичний, то змінні та методи повинні обов'язково бути оголошені статичними.

Клас може бути оголошений статичним, вказуючи, що він містить лише статичні елементи. Неможливо створити екземпляри статичного класу за допомогою нового ключового слова. Статичні класи завантажуються автоматично під час виконання спільної мови .NET Framework (CLR), коли завантажується програма або область імен, що містить клас.

Використовуйте статичний клас, щоб містити методи, не пов'язані з певним об'єктом. Наприклад, звичайною вимогою є створення набору методів, які не діють на даних екземпляра, і не пов'язані з певним об'єктом у вашому коді. Ви можете використовувати статичний клас для підтримки цих методів.

->The main features of a static class are:

  • Вони містять лише статичні елементи.
  • Неможливо показати їх.
  • Вони запечатані
  • Вони не можуть містити конструкторів екземплярів або просто конструкторів, оскільки ми знаємо, що вони пов'язані з об'єктами і працюють на даних при створенні об'єкта.

Приклад

static class CollegeRegistration
{
  //All static member variables
   static int nCollegeId; //College Id will be same for all the students studying
   static string sCollegeName; //Name will be same
   static string sColegeAddress; //Address of the college will also same

    //Member functions
   public static int GetCollegeId()
   {
     nCollegeId = 100;
     return (nCollegeID);
   }
    //similarly implementation of others also.
} //class end


public class student
{
    int nRollNo;
    string sName;

    public GetRollNo()
    {
       nRollNo += 1;
       return (nRollNo);
    }
    //similarly ....
    public static void Main()
   {
     //Not required.
     //CollegeRegistration objCollReg= new CollegeRegistration();

     //.
     int cid= CollegeRegistration.GetCollegeId();
    string sname= CollegeRegistration.GetCollegeName();


   } //Main end
}
13
додано
примусово примусово примусово примусово примусово примусово
додано Автор l--'''''&#, джерело

Статичні класи можуть бути корисними в певних ситуаціях, але є потенціал для зловживання та/або надмірного використання, як і більшість функцій мови.

Як вже згадував Ділан Сміт, найбільш вірогідним є використання статичного класу, якщо у вас є клас із лише статичними методами. Немає сенсу дозволити розробникам продемонструвати такий клас.

Застереження полягає в тому, що надлишок статичних методів сам по собі може свідчити про недоліки вашої стратегії дизайну. Я вважаю, що, коли ви створюєте статичну функцію, це добре, якщо запитати себе - чи буде це краще підходить як: а) метод екземпляра, або б) метод розширення для інтерфейсу. Ідея полягає в тому, що об'єктна поведінка, як правило, пов'язана з об'єктом стану, тобто поведінка повинна належати об'єкту. Використовуючи статичну функцію, ви мали на увазі, що поведінка не повинна належати жодному конкретному об'єкту.

Поліморфний та інтерфейсний дизайн перешкоджатимуть застосуванню статичних функцій - їх не можна перезаписати в похідних класах і не можна прив'язати до інтерфейсу. Зазвичай, краще мати функції "помічника", прив'язані до інтерфейсу, за допомогою методу розширення, так що всі екземпляри інтерфейсу мають доступ до цієї спільної "допоміжної" функції.

Одна з ситуацій, коли статичні функції, безумовно, корисні, на мій погляд, полягає у створенні методу .Create() або .New() для реалізації логіки створення об'єктів, наприклад, якщо ви хочете встановити проксі об'єкт, який створюється,

public class Foo
{
    public static Foo New(string fooString)
    {
        ProxyGenerator generator = new ProxyGenerator();

        return (Foo)generator.CreateClassProxy
             (typeof(Foo), new object[] { fooString }, new Interceptor()); 
    }

Це можна використовувати з проксі-сервером (наприклад, Castle Dynamic Proxy), де ви хочете перехопити/вставити функціональні можливості в об'єкт, виходячи з тверджень, певних атрибутів, присвоєних його методам. Загальна ідея полягає в тому, що вам потрібен спеціальний конструктор, оскільки ви технічно створюєте копію оригінального екземпляра з додатковою функцією.

3
додано
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug