覆盖在子类C#
问题描述:
设置属性的一部分从基抽象类我有一个抽象类甲作为我的基类从类乙导出。我怎么能覆盖set
的DrawingType
属性在子类乙。覆盖在子类C#
public abstract class A
{
protected DrawingType m_type;
public DrawingType Type
{
get { return m_type; }
set { m_type = value}
}
}
public B : A
{
// I want to override the 'set' of DrawingType property here.
}
答
你的类应该如下所示:
abstract class A
{
protected DrawingType m_type;
protected virtual DrawingType Type
{
get { return m_type; }
set { m_type = value; }
}
}
class B : A
{
protected override DrawingType Type
{
get
{
return m_type;
}
set
{
m_type = //custom logic goes here
}
}
}
如果基类没有实现,你可以使用
abstract class A
{
protected DrawingType m_type;
protected abstract DrawingType Type { get; set; }
}
+0
不,“A”类中的属性应该是“虚拟”的,而不是“抽象的”。你不能有一个具有实现的'abstract'类成员。 – itsme86
+1
我的不好,已更新 –
1)你'A'类没有按” t从声明中看起来非常抽象,2)属性是'Type',而不是'DrawingType',3)将'Type'属性标记为'virtual',以便覆盖它。你需要重写get和set。你不能只挑一个。 – itsme86
除了@ itsme86的建议之外,您还可以创建一个虚拟方法并将属性设置为private,然后只通过虚拟方法进行设置,您可以从子类中重写此设置,只是替代方法,更喜欢第一种解决方案。 .. – CodexNZ
@CodexNZ谢谢,实际上这就是我现在正在做的方式。 – Vahid