好了,直到你不想使用反射在一些奇怪的方式,喜歡的GetType()的getProperty(「容器」 ......),不存在任何缺點。
然而認爲是不乾淨,以暴露一個字段,屬性通常是從一個純粹點清潔器。
的FxCop會警告你,這是一個不是很好的事情,但目前還沒有缺點。
如果你想很短,但在同一時間乾淨,你可以使用自動屬性:但是
public static IUnityContainer Container { get; set; }
自動屬性只能因爲編譯器3.0版。
一個可能的缺點是可能發生的是,如果你或其他人傳遞場按地址在某些功能,例如,Interlocked.Exchange(ref MyClass.MyStaticField, null);
如果你在將來的屬性改變它,所以你應該在小心就會不再工作不通過引用傳遞該字段。如果你從一開始就使用一個屬性,你就不會有這個問題。 這個問題不會發生在static readonly
字段中,它們不能通過引用傳遞。使用靜態只讀字段非常常見。
其中場絕對不應該被用來替代屬性的情況是,當你有一個繼承的MarshalByRefObject,用於遠程調用(RPC,遠程過程調用)的類。
在這裏,我發佈一個例子,就像我說的,是不是你的情況,因爲這個問題是實例字段,而不是與靜態字段。
public class MyClass :
MarshalByRefObject
{
public int MyValue;
}
class Program
{
static void Main(string[] args)
{
var obj = new MyClass();
// This will give you warning CS1690: Accessing a member on 'MyValue' may cause a runtime exception because it is a field of a marshal-by-reference class
Console.WriteLine(obj.MyValue.ToString());
}
}
遠程過程調用僅適用於方法和屬性,基於這個原因,編譯器給你一個警告,因爲MarshalByRefObject的可以在室內另一AppDomain中,或被另一個進程或通過TCP/IP的另一臺計算機例如被調用。
完全一樣。參見[這裏](http://stackoverflow.com/questions/7280502/c-sharp-automatic-properties-are-they-safe-for-enterprise-development/7280544#7280544)瞭解更多信息。 – CodeCaster
這不完全相同。在這裏,他正在談論一個領域VS一個財產,其中有數百個討論可以通過簡單的Google找到。您的鏈接會介紹自動屬性和差異。 –
@CodeCaster它不完全相同。您的鏈接顯示,自動實現的屬性與實現的手動相同,但在這個問題中,它是一個字段和一個屬性。 – DanielB