子类属性不可见

本文关键字:属性 子类 | 更新日期: 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();

您看不到子类的任何属性,因为您已经告诉编译器objParent类型。如果你想看到子类的属性,你可以将obj转换为真实类型:

Parent obj = new Child2();
string str = ((Child2)obj).PropertyforChild2;
当然,这不是理想的代码。主要是因为你必须知道obj的类型是Child2既然你知道了,为什么不把obj的类型设为Child2呢?