在c#中如何防止修改类

时间:2017-12-06 14:26:38

标签: c# interface

我们说我有一个界面:

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属性,因此无法编译。

我想知道的是,如果有一种方法可以产生相同的行为,如果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.
}

我希望它不能编译,或者至少给我一个编译警告。

4 个答案:

答案 0 :(得分:3)

没有。接口定义对象必须实现的成员。他们无法定义无法实现的对象。您可以使用自己的自定义或第三方代码分析工具来识别这样的情况,但语言本身没有任何内容可以支持它。

答案 1 :(得分:2)

不,不可能。你不想在这里定义一个class吗?你为什么真的需要一个界面?

但是,你可以实现的是通过

调用你的界面而不是你的类
 IPerson person = new Person();

这样您可以限制person对象只访问界面中定义的方法。

答案 2 :(得分:0)

有一种方法可以做到这一点,但不是在对象内部,并且在构造对象时使用它有点傻。使用Reflection,您可以检查对象实例的type并迭代其属性,如果属性的计数或名称与您所需的实例不匹配,则抛出异常。请注意,如果您只是检查界面,实现对象将通过,因此您将检查所需的具体类型。我在手机上或者我添加了一些示例代码,稍后会尝试返回。

答案 3 :(得分:0)

有一种方法可以做到这一点,但不是在对象内部,并且在构造对象时使用它有点傻。使用Reflection,您可以检查对象实例的type并迭代其属性,如果属性的计数或名称与您所需的实例不匹配,则抛出异常。请注意,如果您只是检查界面,实现对象将通过,因此您将检查所需的具体类型。我在手机上,所以没有示例代码。稍后会尝试回到此处。