簡體   English   中英

在C#中如何防止類被修改

[英]In c# how to prevent a class from being modified

假設我有一個接口:

interface IPerson
{
   int Age { get; set; }
   string Name { get; set; }
   bool Alive { get; set; }
}

和一個類:

public class Person : IPerson
{
   public int Age { get; set; }
   public string Name { get; set; }
}

由於Person沒有實現Alive Property,因此無法編譯。

我想知道的是,如果Person添加了在其界面中找不到的額外屬性,是否有一種方法可以具有相同的行為。

interface IPerson
{
   int Age { get; set; }
   string Name { get; set; }
}

和一個類:

public class Person : IPerson
{
   public int Age { get; set; }
   public string Name { get; set; }
   public bool Alive { get; set; }  <---- This should prevent it from compiling as well.
}

我希望它也不能編譯,或者至少給我一個編譯警告。

否。接口定義對象必須實現的成員。 他們無法定義對象無法實現的成員。 您可能會使用自己的自定義或第三方代碼分析工具來識別類似的情況,但是語言本身沒有任何東西可以支持它。

不,這是不可能的。 您不是要在此處定義class本身嗎? 為什么真正需要一個界面?

但是,您可以實現的是通過執行接口而不是類來進行調用

 IPerson person = new Person();

這樣,您可以限制人員對象僅訪問界面中定義的方法。

有一種方法可以做到這一點,但是不能在對象內部進行,並且在對象的構造中使用它有點愚蠢。 使用Reflection ,您可以檢查對象實例的type並遍歷對象的屬性,如果屬性的計數或名稱與所需實例不匹配,則會引發異常。 請注意,如果僅檢查接口,則實現對象將通過,因此將檢查所需的具體類型。 我在手機上,或者要添加一些示例代碼,稍后將嘗試返回此代碼。

有一種方法可以做到這一點,但是不能在對象內部進行,並且在對象的構造中使用它有點愚蠢。 使用Reflection ,您可以檢查對象實例的type並遍歷對象的屬性,如果屬性的計數或名稱與所需實例不匹配,則會引發異常。 請注意,如果僅檢查接口,則實現對象將通過,因此將檢查所需的具體類型。 我在手機上,所以沒有示例代碼。 稍后將嘗試返回到此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM