Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-加载继承的类_C# - Fatal编程技术网

C#-加载继承的类

C#-加载继承的类,c#,C#,我有一个叫做FieldDesc的类 public class FieldDesc { public FieldDesc() { } } 我还有一个从FieldDesc继承的类,名为StandardHoursByCommunitySvcType public class StandardHoursByCommunitySvcType: FieldDesc { public StandardHoursByCommunitySvcType() { } } 在我的控制

我有一个叫做
FieldDesc
的类

public class FieldDesc {
    public FieldDesc() {
    }
}
我还有一个从
FieldDesc
继承的类,名为
StandardHoursByCommunitySvcType

public class StandardHoursByCommunitySvcType: FieldDesc {
    public StandardHoursByCommunitySvcType() {
    }
}
在我的控制下,我有-

FieldDesc aTable;
aTable = new FieldDesc();

String TableName = "StandardHoursByCommunitySvcType";

要使
aTable
知道它是类型为
StandardHoursByCommunitySvcType
的对象,我必须做些什么?

您可以使用is运算符来找出这一点

if(someObject is StandardHoursByCommunitySvcType )
    {
       //it means is is object of StandardHoursByCommunitySvcType  type
    }

你的问题不清楚。您正在尝试将aTable声明为StandardHoursByCommunitySvcType,还是尝试确定它是否已声明为一个

如果您试图声明:

FieldDesc aTable;
aTable = new StandardHoursByCommunitySvcType();
只要StandardHoursByCommunitySvcType继承自FieldDesc,它就可以工作

如果您试图确定类型:

if(aTable is StandardHoursByCommunitySvcType)
{
    //Do something
}

如果你有两门课

public class FieldDesc
{
    public FieldDesc()
    {
    }

    public void A()
    {
    }

    public virtual void V()
    {
        Console.WriteLine("V from FieldDesc");
    }
}

public class StandardHoursByCommunitySvcType : FieldDesc
{
    public StandardHoursByCommunitySvcType()
    {
    }

    public void B()
    {
    }

    public overrides void V()
    {
        Console.WriteLine("V from StandardHoursByCommunitySvcType");
    }
}
你可以这样做

FieldDesc fd = new StandardHoursByCommunitySvcType();
StandardHoursByCommunitySvcType svc = new StandardHoursByCommunitySvcType();

fd.A(); // OK
fd.B(); // Fails (does not compile)
((StandardHoursByCommunitySvcType)fd).B(); // OK
fd.V(); // OK, prints "V from StandardHoursByCommunitySvcType"

svc.A(); // OK
svc.B(); // OK
svc.V(); // OK, prints "V from StandardHoursByCommunitySvcType"

派生类与基类的赋值兼容;但是,通过类型为基类的变量访问时,您只能看到基类的成员。

它不是
StandardHoursByCommunitySvcType
的对象。您将其声明为
new FieldDesc()
您必须分配
aTable=new standard hoursbycommunitySvctype()
。否则,无法将其转换为标准的HoursbyCommunitySVctype在代码示例中,
aTable
将始终是
FieldDesc
类型,因为它是这样构造的。在这里,您试图实现什么目标?Bernard-我正在尝试创建一个基类,该基类包含我需要的功能,其中子类特定于特定的表。这样,当我实例化一个FieldDesc时,我不想告诉它加载子类,而是加载通过子类定义的基类定义。有意义吗?我很欣赏所有的输入,但是如果我想声明一个特定于子类的对象,我可以实例化这个子类。我试图从控件中抽象出该规范。有没有一种方法可以使用TableName来指定要使用哪个子类?