详解C#中的属性和属性的使用

2019-12-30 11:39:54于丽


Person person = new Person();
person.Name = "Joe"; // the set accessor is invoked here        

System.Console.Write(person.Name); // the get accessor is invoked here

在 set 访问器中,对局部变量声明使用隐式参数名称 value 是错误的。

此例说明了实例、静态和只读属性。它从键盘接受雇员的姓名,按 1 递增 NumberOfEmployees,并显示雇员的姓名和编号。


public class Employee
{
  public static int NumberOfEmployees;
  private static int counter;
  private string name;

  // A read-write instance property:
  public string Name
  {
    get { return name; }
    set { name = value; }
  }

  // A read-only static property:
  public static int Counter
  {
    get { return counter; }
  }

  // A Constructor:
  public Employee()
  {
    // Calculate the employee's number:
    counter = ++counter + NumberOfEmployees;
  }
}

class TestEmployee
{
  static void Main()
  {
    Employee.NumberOfEmployees = 107;
    Employee e1 = new Employee();
    e1.Name = "Claude Vige";

    System.Console.WriteLine("Employee number: {0}", Employee.Counter);
    System.Console.WriteLine("Employee name: {0}", e1.Name);
  }
}

输出:


  Employee number: 108
  Employee name: Claude Vige

此示例说明如何访问基类中由派生类中具有同一名称的另一个属性所隐藏的属性。


public class Employee
{
  private string name;
  public string Name
  {
    get { return name; }
    set { name = value; }
  }
}

public class Manager : Employee
{
  private string name;

  // Notice the use of the new modifier:
  public new string Name
  {
    get { return name; }
    set { name = value + ", Manager"; }
  }
}

class TestHiding
{
  static void Main()
  {
    Manager m1 = new Manager();

    // Derived class property.
    m1.Name = "John";

    // Base class property.
    ((Employee)m1).Name = "Mary";

    System.Console.WriteLine("Name in the derived class is: {0}", m1.Name);
    System.Console.WriteLine("Name in the base class is: {0}", ((Employee)m1).Name);
  }
}

输出:


  Name in the derived class is: John, Manager
  Name in the base class is: Mary

以下是上一个示例中的要点:
派生类中的属性 Name 隐藏基类中的属性 Name。在这种情况下,派生类的属性声明中使用 new 修饰符:


public new string Name

转换 (Employee) 用于访问基类中的隐藏属性: