假设我有一个班级:
abstract class MyBaseClass {
[Attribute1]
[Attribute2]
public string Property1 {get; set; }
[Attribute3]
[Attribute4]
public string Property2 {get; set; }
}
在子类中,扩展了这个类,我想在Property1
和Property2
中添加新属性,保留在父类中声明的属性。
这可能吗?
答案 0 :(得分:2)
Two Second=new SecondFragment(); // it will be called on click of firstFragment which pass the value.
Second.two("Value one","Value two");
interface Two{
void two(String value,String value); // implement this inteface in SecondFragment and call it in FirstFragment
}
确保属性1-4使用inherited = true
abstract class MyBaseClass {
[Attribute1]
[Attribute2]
public virtual string Property1 {get; set; }
[Attribute3]
[Attribute4]
public virtual string Property2 {get; set; }
}
class NewClass:MyBaseClass
{
[Attribute5]
public override string Property1 {get;set;}
[Attribute6]
public override string Property2 {get;set;}
}
答案 1 :(得分:1)
是的,您可以覆盖Property1
和Property2
。你显然需要在基类中使它们虚拟化:
class MyAttribute: Attribute {}
class YourAttribute: Attribute {}
class Base
{
[My]
public virtual void Foo() {}
}
class Derived: Base
{
[Your]
public override void Foo()
{
}
}
现在var attributes = typeof(Derived).GetMethod("Foo").GetCustomAttributes();
将返回MyAttribute
的{{1}}和YourAttribute
个实例。
请注意,所有Derived.Foo
类型方法都有一个重载,允许您指定是否要将继承的属性包含在结果中。默认行为是包含继承的属性。
答案 2 :(得分:0)
只有在未使用AttributeUsageAttribute.Inherited = false
指定要继承的属性时才可能。例如,加入ObsoleteAttribute
不起作用:
abstract class MyBaseClass {
[Obsolete]
public virtual string Property1 {get; set; }
}
class Derived : MyBaseClass
{
public override string Property1 {get; set;}
}
在此示例中,您会收到警告消息:
会员' Property1'覆盖过时的成员' Property1'。添加 属于' Property1'
的过时属性
默认情况下,使用Inherit = True
标志设置属性。因此,如果您创建自定义属性,继承应该可以正常工作。