熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C# 自動實現屬性的意想不到行為

2022-06-13   來源: .NET編程 

  在這個代碼片斷中Joseph 測試了一個使用 C# 反射來自動實現屬性時發生了一個意想不到行為的方案之後提供了該方案的分步說明他提供了示例項目最終輸出的截圖相關的 C# 完整代碼Visual Studio 的項目下載

  Code

  Listing : Employeecs

  using System;
namespace CompilerGeneratedProps
{
    public class Employee : Person
    {
        //Fields
        protected string Title;
    }
}

  Listing : Personcs

  using System;
namespace CompilerGeneratedProps
{
    public class Person
    {
        //Fields
        protected string _LastName; //Declared protected for extensibility
 
        //Properties
        public string FirstName { get; set; } //Autoimplemented property
 
        public string LastName
        {
            get
            {
                return this_LastName;
            }
            set
            {
                this_LastName = value;
            }
        }
    }
}

  Listing : Programcs

  using System;
using SystemReflection;
 
namespace CompilerGeneratedProps
{
  public class Program
  {
    static void Main(string[] args)
    {
      ConsoleWriteLine(Fields seen in an instance of Person);
      ConsoleWriteLine();
 
      Person objPerson = new Person();
      foreach (FieldInfo fi in
        objPersonGetType()GetFields(BindingFlagsInstance |
        BindingFlagsNonPublic | BindingFlagsPublic))
      {
        ConsoleWriteLine(fiName);
      }
 
      ConsoleWriteLine(\n\n\n\nFields seen in an instance of Employee);
      ConsoleWriteLine();
 
      Employee objEmployee = new Employee();
      foreach (FieldInfo fi in
        objEmployeeGetType()GetFields(BindingFlagsInstance |
        BindingFlagsNonPublic | BindingFlagsPublic))
      {
        ConsoleWriteLine(fiName);
      } 
      ConsoleRead();
    }
  }
}

  結果輸出

  

  項目下載[Download Source]

  結論

  如果在一個父類中使用自動實現屬性使用反射來收集一個派生類的字段將不會獲得對應於上述所說的屬性字段經典方法在這種情況下編碼屬性會更好


From:http://tw.wingwit.com/Article/program/net/201311/13584.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.