子类属性不可见
本文关键字:属性 子类 | 更新日期: 2023-09-27 18:12:51
我对c#相当陌生,对抽象类非常陌生。下面是我正在编写的代码示例。我用Parent obj = new Child2();
或Parent obj = new Child3();
实例化我的对象
注意,这样做的目的是Child 2和3有不同的属性,但有一些常见的重载方法。
我的问题是我不能看到任何属性在子类
如果我对这个问题描述得不够详细,请让我知道,我将详细说明
namespace ns
{
public class Parent
{
public abstract DataTable ImportToDataTable()
}
public class Child2 : Parent
{
public DelimitedFileDetail InputFile = new DelimitedFileDetail();
public string PropertyforChild1 { get; set; }
public override DataTable ImportToDataTable() { .....code }
}
public class Child3 : Parent
{
public string PropertyforChild2 { get; set; }
public override DataTable ImportToDataTable() { .....code }
}
public class DelimitedFileDetail : Child2
{
public string Name { get; set; }
public ImportTypes FileType { get; set; }
public List<FieldDefinitions> FieldList = new List<FieldDefinitions>();
}
}
应该将父类定义为接口,而不是抽象类或基类
这样你的子类就可以实现接口。然后你应该使用接口变量来引用子类/实现。
你把Parent定义为抽象类是有原因的吗?接口就可以了,因为你还没有实现任何抽象成员
当你在c#中用Parent类型声明变量时,智能感知不会显示子类型的属性。如果你想使用子元素的特定属性,你需要用特定子元素的类型来声明变量。
所以我们不这样做:
Parent obj = new Child2();
你应该这样做:
Child2 obj = new Child2();
您看不到子类的任何属性,因为您已经告诉编译器obj
是Parent
类型。如果你想看到子类的属性,你可以将obj
转换为真实类型:
Parent obj = new Child2();
string str = ((Child2)obj).PropertyforChild2;
当然,这不是理想的代码。主要是因为你必须知道obj
的类型是Child2
既然你知道了,为什么不把obj
的类型设为Child2
呢?