我们说我有一个界面:
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.
}
我希望它不能编译,或者至少给我一个编译警告。
答案 0 :(得分:3)
没有。接口定义对象必须实现的成员。他们无法定义无法实现的对象。您可以使用自己的自定义或第三方代码分析工具来识别这样的情况,但语言本身没有任何内容可以支持它。
答案 1 :(得分:2)
不,不可能。你不想在这里定义一个class
吗?你为什么真的需要一个界面?
但是,你可以实现的是通过
调用你的界面而不是你的类 IPerson person = new Person();
这样您可以限制person对象只访问界面中定义的方法。
答案 2 :(得分:0)
有一种方法可以做到这一点,但不是在对象内部,并且在构造对象时使用它有点傻。使用Reflection
,您可以检查对象实例的type
并迭代其属性,如果属性的计数或名称与您所需的实例不匹配,则抛出异常。请注意,如果您只是检查界面,实现对象将通过,因此您将检查所需的具体类型。我在手机上或者我添加了一些示例代码,稍后会尝试返回。
答案 3 :(得分:0)
有一种方法可以做到这一点,但不是在对象内部,并且在构造对象时使用它有点傻。使用Reflection
,您可以检查对象实例的type
并迭代其属性,如果属性的计数或名称与您所需的实例不匹配,则抛出异常。请注意,如果您只是检查界面,实现对象将通过,因此您将检查所需的具体类型。我在手机上,所以没有示例代码。稍后会尝试回到此处。