子类属性不可见

时间:2016-10-12 17:54:57

标签: c# inheritance

我对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>();
    }

}

3 个答案:

答案 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定义为抽象类?界面应该这样做,因为你还没有实现任何抽象成员