我对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>();
}
}
答案 0 :(得分:0)
好吧,当您使用Parent类型在c#中声明变量时,intelisense不会显示子项的属性。 如果要使用子项的特定属性,则需要使用特定子项的类型声明变量。
所以不要这样做:
Parent obj = new Child2();
你应该这样做:
Child2 obj = new Child2();
等等......
答案 1 :(得分:0)
您无法看到子类的任何属性,因为您已告诉编译器obj
属于Parent
类型。如果要查看子类的属性,可以将obj
强制转换为真实类型:
Parent obj = new Child2();
string str = ((Child2)obj).PropertyforChild2;
这当然不是理想的代码。主要是因为那时您必须知道obj
属于Child2
类型,如果您知道,为什么不给obj
类型Child2
?
答案 2 :(得分:0)
您应该将您的Parent类定义为接口而不是抽象类或基类
这样您的子类就可以实现该接口。然后你应该使用接口变量来引用子类/实现。
您是否有理由将Parent定义为抽象类?界面应该这样做,因为你还没有实现任何抽象成员