Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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
.net 为什么System.Drawing.Image类被定义为抽象类,同时还定义了将其作为类型返回的方法?_.net_Abstract Class - Fatal编程技术网

.net 为什么System.Drawing.Image类被定义为抽象类,同时还定义了将其作为类型返回的方法?

.net 为什么System.Drawing.Image类被定义为抽象类,同时还定义了将其作为类型返回的方法?,.net,abstract-class,.net,Abstract Class,我试图理解.NET framework创建者在设计System.Drawing.Image类时做出的设计决策。它是抽象的,但是很多繁重的工作是直接用Image类完成的。它还定义了两种直接创建Image对象的方法,Image.FromFile和Image.FromStream 我认为抽象类的目的是方便定义只应由子类继承的功能。抽象类实际上会定义返回抽象类实例的方法,这似乎很奇怪 为什么它是以这种方式实现的?这是的一个实例。这种模式在.NET framework中非常普遍,另一个例子是System.

我试图理解.NET framework创建者在设计
System.Drawing.Image
类时做出的设计决策。它是抽象的,但是很多繁重的工作是直接用
Image
类完成的。它还定义了两种直接创建
Image
对象的方法,
Image.FromFile
Image.FromStream

我认为抽象类的目的是方便定义只应由子类继承的功能。抽象类实际上会定义返回抽象类实例的方法,这似乎很奇怪


为什么它是以这种方式实现的?

这是的一个实例。这种模式在.NET framework中非常普遍,另一个例子是System.NET.WebRequest.Create,它可以根据指定的Uri返回不同的子类


该模式的原因是,可以根据图像类型创建不同的图像子类,如位图。

这是图像的一个实例。这种模式在.NET framework中非常普遍,另一个例子是System.NET.WebRequest.Create,它可以根据指定的Uri返回不同的子类


该模式的原因是,可以根据图像类型创建不同的图像子类,如位图。

@eulerfx:但图像类不返回子类,它实际上返回自身的实例。方法的签名指定返回图像,但是返回的实际对象实例将是图像的子类。您可以通过启动调试会话、在返回映像实例后放置断点并查看变量以查看实际类型来验证这一点。@eulerfx:我不明白这是怎么回事。返回的
类型
图像
,没有参数或任何东西可以告诉它要返回哪个子类。我认为它确实返回了一个
图像
类型
,而不是
图像
的子类。请看这里:要返回的子类由Image类本身决定。您可以显式地创建一个子类,例如var bmp=new Bitmap(@“c:\image.bmp”);是的,你说得对-当我加载一个JPG时,它返回了一个
Bitmap
类型。非常感谢你帮助我理解这一点@eulerfx:但是image类不返回子类,它实际上返回自身的一个实例。方法的签名指定返回图像,但是返回的实际对象实例将是图像的子类。您可以通过启动调试会话、在返回映像实例后放置断点并查看变量以查看实际类型来验证这一点。@eulerfx:我不明白这是怎么回事。返回的
类型
图像
,没有参数或任何东西可以告诉它要返回哪个子类。我认为它确实返回了一个
图像
类型
,而不是
图像
的子类。请看这里:要返回的子类由Image类本身决定。您可以显式地创建一个子类,例如var bmp=new Bitmap(@“c:\image.bmp”);是的,你说得对-当我加载一个JPG时,它返回了一个
Bitmap
类型。非常感谢你帮助我理解这一点!