Почему объекты класса stati c не могут быть созданы? и какой конструктор содержит класс stati c? - PullRequest
1 голос
/ 25 апреля 2020

Когда я искал и набрал несколько очков, stati c класс запечатан и использует закрытый конструктор внутри, тогда почему в моем коде я не могу получить доступ к методу, используя имя класса, используя System?

using System; 

public sealed class ClasswithPrivateCons { 
  private ClasswithPrivateCons() { } 
  public void Printname() { Console.WriteLine("Hello world"); }
}
public class Program { 
  public static void Main() { 
    ClasswithPrivateCons.Printname(); // gives error
  }
} 

Ответы [ 2 ]

3 голосов
/ 25 апреля 2020

Было бы полезно, если бы вы также включили полученную ошибку, но в этом случае очевидно: Printname не является методом c, поэтому вы не можете вызвать его без экземпляра * 1002. *. Поскольку этот конструктор является закрытым, вы не можете создавать эти объекты.

Три варианта разрешения:

  • Сделать Printname() статическим; тогда ClasswithPrivateCons.Printname() будет работать
  • Сделать конструктор общедоступным; тогда new ClasswithNoLongerPrivateCons().Printname() будет работать
  • Добавить общедоступный c stati c фабричный метод, который вызывает приватный конструктор:
    • public static ClasswithPrivateCons New() { return new ClassWithPrivateCons(); }
    • ClassWithPrivateCons.New().Printname()
0 голосов
/ 25 апреля 2020
  1. Запечатанный класс не статичен c. Когда класс определяется как запечатанный класс, это просто означает, что класс не может быть унаследован. Вы должны создать его экземпляр перед использованием. Запечатанный класс с закрытым конструктором автоматически не становится классом c. Класс Stati c имеет поведение, подобное запечатанному, но он представляет отдельный тип объектов в OOP. «Запечатанный» просто означает, что класс не может быть унаследован, но в любом случае мы должны создать экземпляр. В то же время не может быть создан экземпляр класса stati c.
  2. Конструктор класса должен быть опубликован c, иначе мы не смогли бы создать экземпляр. Конструктор экземпляров не только инициализирует новый объект, но и отвечает за создание новых объектов и их подготовку к использованию. Конструктор, в отличие от обычного метода, использует внутренние. NET механизмы, направленные на создание нового экземпляра.
    public sealed class ClasswithPrivateCons
    {
        public ClasswithPrivateCons() { }
        public void Printname() { Console.WriteLine("Hello world"); }
    }

    class Program
    {
        static void Main(string[] args)
        {
            ClasswithPrivateCons cl = new ClasswithPrivateCons();
            cl.Printname();
        }
    }

Также метод Printname может быть объявлен как stati c. Чем это можно назвать

ClasswithPrivateCons.Printname();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...