派生摘要 属性
Derive Abstact Property
我有一个基础 class 有一个摘要 属性:
public class BottomClass {
public abstract string Name {get;set;}
}
我现在有一个 class 派生自:
public class MiddleClass:BottomClass {
public override string Name {get;set;}
}
我现在想要的是 "MiddleClass" 本身将 属性 定义为抽象的,以便从中派生的 class 将被迫实现 属性。以下代码不是那样工作的:
public class MiddleClass:BottomClass {
public abstract override string Name {get;set;} // Not possible that way
}
public class TopClass:MiddleClass {
public override string Name {get;set;} ="tothetop";
}
有没有办法实现我想要的?
如果你将一个属性定义为抽象的,你必须在一些非抽象的class中实现它。因此,在两个 class 中都使用 属性 的唯一可能方法是
public abstract class BottomClass
{
public abstract string NameB { get; set; }
}
public abstract class MiddleClass : BottomClass
{
public abstract string NameM { get; set; }
}
public class TopClass : MiddleClass {
public override string NameB { get; set; }
public override string NameM { get; set; }
}
据我了解,您的意图是 'Name' 属性 进入 MiddleClass。
或者不执行它,正如 Damien 在上面评论的那样。
如果您有某些理由不对 class 进行抽象,则抛出异常。
public class MiddleClass:BottomClass
{
public override string Name
{
get => throw new NotImplementedException();
set => throw new NotImplementedException();
}
}
我有一个基础 class 有一个摘要 属性:
public class BottomClass {
public abstract string Name {get;set;}
}
我现在有一个 class 派生自:
public class MiddleClass:BottomClass {
public override string Name {get;set;}
}
我现在想要的是 "MiddleClass" 本身将 属性 定义为抽象的,以便从中派生的 class 将被迫实现 属性。以下代码不是那样工作的:
public class MiddleClass:BottomClass {
public abstract override string Name {get;set;} // Not possible that way
}
public class TopClass:MiddleClass {
public override string Name {get;set;} ="tothetop";
}
有没有办法实现我想要的?
如果你将一个属性定义为抽象的,你必须在一些非抽象的class中实现它。因此,在两个 class 中都使用 属性 的唯一可能方法是
public abstract class BottomClass
{
public abstract string NameB { get; set; }
}
public abstract class MiddleClass : BottomClass
{
public abstract string NameM { get; set; }
}
public class TopClass : MiddleClass {
public override string NameB { get; set; }
public override string NameM { get; set; }
}
据我了解,您的意图是 'Name' 属性 进入 MiddleClass。
或者不执行它,正如 Damien 在上面评论的那样。
如果您有某些理由不对 class 进行抽象,则抛出异常。
public class MiddleClass:BottomClass
{
public override string Name
{
get => throw new NotImplementedException();
set => throw new NotImplementedException();
}
}