【发布时间】:2015-10-10 18:59:58
【问题描述】:
Jon Skeet 在他的视频中曾提出过这个问题 (虽然没有提供答案)。
假设我们有一个名为 Person 的类 并且 Person 类具有 Name 属性
然后我们有另一个班级,间谍。 当然,Spy 是 Person,所以我们将派生自 Person 类。
public class Person
{
public string Name { get; set; }
}
public class Spy : Person
{
}
我们不希望人们知道间谍的名字,所以我们希望这会产生编译错误:
static void ReportSpy(Spy spy) {
string name = spy.Name;
}
或者:
static void ReportSpy(Spy spy)
{
Person spyAsPerson = spy;
string name = spyAsPerson.Name;
}
我们怎样才能防止这种事情发生?
【问题讨论】:
-
如果间谍拒绝透露自己的名字,就会导致怀疑他们是间谍,最好是提供一个假名,比如“John Doe”。
-
删除这个:我们希望它给出一个编译错误。否则,接受的答案不会回答问题。
-
@user1620220 是的,或者那个。 IRL 间谍确实有名字。但可能这个间谍的真正模拟类似于 NetworkStream 示例,其中 Position 不是可以实现的东西。
标签: c# inheritance