【问题标题】:C# sample syntax questionC# 示例语法问题
【发布时间】:2010-12-25 09:32:49
【问题描述】:

请帮助我理解这段代码:

       protected Customer()
    {
    }

在以下类中(示例 WPF MVVM 应用中的模型类):

    public class Customer : IDataErrorInfo
{
    #region Creation

    public static Customer CreateNewCustomer()
    {
        return new Customer();
    }

    public static Customer CreateCustomer(
        double totalSales,
        string firstName,
        string lastName,
        bool isCompany,
        string email)
    {
        return new Customer
        {
            TotalSales = totalSales,
            FirstName = firstName,
            LastName = lastName,
            IsCompany = isCompany,
            Email = email
        };
    }

    protected Customer()     // it is what I asked about
    {
    }

    #endregion // Creation
......
}

【问题讨论】:

  • 感谢所有回答的人。很难选择接受的答案(抱歉只能是一个)。我对这段代码的怀疑与用于创建实例的多个构造函数的存在以及每个实例的特定目的有关。

标签: c# wpf syntax methods


【解决方案1】:

protected Customer() { } 是一个构造函数,一个特殊的方法,当你从一个类中实例化一个对象时会自动调用它。当您键入Customer c = new Customer() 时,允许构造函数在运行时为其分配并重置内存后初始化该实例。 protected 关键字意味着只允许 Customer 类或其后代中的代码使用该特定构造函数实例化所述类。

【讨论】:

    【解决方案2】:

    您指向的代码是constructor。每当在运行时创建类的实例时(可能)就会自动调用该方法。

    在这种情况下,它被标记为protected keyword。这意味着只有所有者类加上任何派生类(即从它继承的类)才能访问它。

    通过查看您的代码,您的类中的两个版本的CreateNewCustomer() 静态方法会创建该类的实例,并调用构造函数。通过使构造函数受保护,代码保证类保留对实例化的独占控制;这意味着该类(或其后代类)之外的任何其他代码都不能创建此类的实例。

    【讨论】:

      【解决方案3】:

      构造函数受到保护,因此只有静态创建方法才能实际实例化类。

      【讨论】:

      • 这是不正确的。类或其后代中的任何方法都可以调用受保护的构造函数。
      • 你甚至不必继承。您可以只拥有另一个不受保护的 ctor。
      【解决方案4】:

      这意味着您的类的构造函数具有“受保护”访问权限,这意味着只有此类或子类的成员才能调用它。实际上,这意味着要么使用静态方法来创建此类的实例,要么将另一个构造函数(可能在派生类中)委托给此构造函数。

      【讨论】:

        【解决方案5】:

        在构造函数上使用protected 关键字只允许在其内部(如静态工厂方法)和从Customer 派生的任何类内部实例化Customer 对象。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-06-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多