C# 为什么以及何时在C中使用ParentAbstractClass Obj=新的子类()#

C# 为什么以及何时在C中使用ParentAbstractClass Obj=新的子类()#,c#,asp.net,c#-4.0,callback,C#,Asp.net,C# 4.0,Callback,事实上,我不知道这是否是一个愚蠢的问题,但出于好奇,我问了我的第一个问题。我有两个问题 1) 我在YouTube上看到了一段关于抽象类的视频 在那个视频中,他正在使用classobj=newclassobj()创建类的对象 我的问题是为什么他没有使用AbstractClass Obj=new Child Class() 两者之间有什么区别吗?我是说 父对象=新的子类();vs.AbstractClass obj=新的子类() 2) 我的第二个问题是,我读了一个堆栈溢出问题。 在给出答案的人说了一

事实上,我不知道这是否是一个愚蠢的问题,但出于好奇,我问了我的第一个问题。我有两个问题

1) 我在YouTube上看到了一段关于抽象类的视频

在那个视频中,他正在使用
classobj=newclassobj()创建类的对象
我的问题是为什么他没有使用
AbstractClass Obj=new Child Class()
两者之间有什么区别吗?我是说
父对象=新的子类();vs.AbstractClass obj=新的子类()

2) 我的第二个问题是,我读了一个堆栈溢出问题。 在给出答案的人说了一些关于 视图状态(
……和视图状态保持不变
)。事实上,我在他的回答中不理解viewstate。我发表评论要求解释,但没有人给我答案。有人能回答我这是什么意思吗


请有人回答我的问题。非常感谢您的帮助。

您不能实例化抽象类,但可以使用抽象变量创建具体类,例如:

Stream s = new MemoryStream();   // Stream is an abstract class
这和

MemoryStream ms = new MemoryStream();

在第一个示例中,您只能调用
类中的成员,因为您调用的是变量上的成员,而不是实际的类型。它基于这样一个事实:当
MemoryStream
Stream
继承时,那么每个
MemoryStream
也是一个
,有时您不需要完整的子类功能(在通常期望
的方法中,而不是具体的实现).

假设ParentClass是一个抽象类,ChildClass继承父类

    public abstract class ParentClass 
{
 public int a;
public abstract void MethodA();
}
public class ChildClass :ParentClass
{
public override void MethodA()
{
//some implementation of child
}
public void MethodChildA()
{
//some implementation
}
}
然后 我们可以使用ParentClass实例化子类的对象

ParentClass obj =new ChildClass();
obj保留从父类继承的childclass的成员和方法 obj将没有MethodChildA()实现。obj.MethodChildA()不可能,因为类型parentClass没有MethodChildA()的声明 何时 当我们只需要使用父类成员和方法时,我们将使用对象父类的类型进行实例化。 对象包括parentclass的所有方法,这些方法可以实现childclass或
ChildClass将继承抽象的具体方法 为什么 考虑一个上下文,对象必须只需要父类的属性,而不需要子类< /p>的任何方法。
ChildClass obj=new ChildClass();
何时
如果需要childclass中的所有方法和成员,我强烈建议您一次只问一个问题。如果它们不相关,就发布新问题。据我所知,抽象类是一组对象的一般特征。在这种情况下,是员工。正如您所看到的,员工可以是不同的类型,也可以有不同的行为,但对于一组员工来说,仍然有一些共同的特征和缺点,例如:FirstName和LastName对于这两种员工类型的行为都是相同的。如果有一个函数对
Employee
执行某些处理,并且需要一个类型
BaseEmployee
,也就是说,当您将
FullTimeEmployee
实例化为
BaseEmployee
并将其传递给处理方法时。