2010-08-13 101 views
1

更新:對不起,我錯了,StringBar返回。我們來看看是否可以解決如何刪除這個問題。C#反射:GetProperties的'方法'只讀屬性

想象一下下面的類:

public class Foo 
{ 
    public int Bar { get; set; } 

    public string StringBar 
    { 
     get { return Bar.ToString(); } 
    } 

    public void DoSomething() 
    { 
    } 
} 

如果我寫:typeof(Foo).GetProperties(),在StringBar財產信息不回來,我相信是因爲C#認爲它作爲一種方法,而不是一個屬性。從程序員的角度看,雖然有一個區別:一個方法通常會導致一些狀態改變,而一個屬性不會。

什麼是獲得酒吧和StringBar屬性,但不是DoSomething方法(沒有明確提到他們的名字明顯)的最佳方式是什麼?

+1

返回哪些屬性?我嘗試了代碼,並從GetProperties()獲取StringBar – Elisha 2010-08-13 07:23:41

回答

2

我爭辯說你的聲明不會返回StringBar。這是一個完美的普通物業。

我不認爲你的真實代碼是非公開的,是嗎?

反例代碼 - 與Foo正是你介紹它:

using System; 

class Test 
{ 
    static void Main() 
    { 
     foreach (var prop in typeof(Foo).GetProperties()) 
     { 
      Console.WriteLine(prop.Name); 
     } 
    } 
} 

結果:

Bar 
StringBar 
0

這將打印StringBarBar我。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      foreach (var item in typeof(Foo).GetProperties()) 
       Console.WriteLine(item.Name); 

      Console.ReadKey(); 
     } 

     public class Foo 
     { 
      public int Bar { get; set; } 

      public string StringBar 
      { 
       get { return Bar.ToString(); } 
      } 

      public void DoSomething() 
      { 
      } 
     } 

    } 
} 
0

當然StringBar屬性將被返回!我絕對相信!它仍然是一個屬性,只有行動(只讀)。