我写了一个嵌套类,用作属性的包。此类用作我命名为Properties
的属性。我想通过接口扩展属性数量。
我写了这个例子:
public interface IFirst {
int asd { get; set; }
}
public interface ISecond {
int zxc { get; set; }
}
public class MyClass {
public class PropertyClass : IFirst {
public int asd {
get {
throw new NotImplementedException();
}
set {
throw new NotImplementedException();
}
}
}
public PropertyClass Properties;
}
public class MyNextClass : MyClass {
public class PropertyClass : MyClass.PropertyClass, ISecond {
public int zxc {
get {
throw new NotImplementedException();
}
set {
throw new NotImplementedException();
}
}
}
public void test() {
Properties.zxc = 5; // Here is problem
}
}
但在这种情况下,我无法读/写新属性zxc
。
我认为,因为这仍然是从父类 - Properties
而不是MyClass.PropertyClass
读取MyNextClass.PropertyClass
类型。
我想在不创建新属性或隐藏现有属性的情况下扩展它。
你有什么建议吗?
答案 0 :(得分:1)
您必须确保父类实现两个接口,或者您必须在子类中创建一个嵌套子类型的新静态成员。正如您所推测的那样,Properties
被声明为父嵌套类型,并且声明从父嵌套类型派生的同名子类中的新类型不会改变它。
答案 1 :(得分:1)
那么,取决于你想要达到的目标,方法可能会有所不同。例如,使用抽象类可能会满足您的需求。像这样:
public interface IFirst
{
int asd { get; set; }
}
public interface ISecond
{
int zxc { get; set; }
}
public abstract class MyAbstractClass<T> where T : class
{
public abstract T Properties {get; set;}
}
public class MyClass : MyAbstractClass<MyClass.PropertyClass>
{
public class PropertyClass : IFirst
{
public int asd
{
get { throw new NotImplementedException(); }
set { throw new NotImplementedException(); }
}
}
public override MyClass.PropertyClass Properties
{
get { throw new NotImplementedException(); }
set { throw new NotImplementedException(); }
}
}
public class MyNextClass : MyAbstractClass<MyNextClass.PropertyClass>
{
public class PropertyClass : MyClass.PropertyClass, ISecond
{
public int zxc
{
get { throw new NotImplementedException(); }
set { throw new NotImplementedException(); }
}
}
public override MyNextClass.PropertyClass Properties
{
get { throw new NotImplementedException(); }
set { throw new NotImplementedException(); }
}
public void test()
{
Properties.zxc = 5;
}
}