这是初学者的问题,但我有兴趣了解这里发生了什么.我的问题是,当你向下投射一个物体时幕后会发生什么?它是否保留了关于它最初的内容的某种元数据?这就是我的意思:
假设我有一个名为"ClockIn"的方法,它接受"Employee"类型的参数:
public static void ClockIn(Employee employee)
{
var manager = employee as Manager;
if (manager != null)
{
manager.OpenSafe();
}
}
Run Code Online (Sandbox Code Playgroud)
因此,假设Manager是Employee类型的子类,并且它具有"OpenSafe"方法:
public class Manager : Employee
{
public void OpenSafe()
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
"ClockIn"方法,如果发现Manager已被传入,则调用OpenSafe方法.如:
var bob = new Manager();
ClockIn(bob);
Run Code Online (Sandbox Code Playgroud)
在这里,我将一个类型为Manager的实例传递给一个接受基类Employee的方法.在调用OpenSafe之前,我需要将ClockIn方法中的实例强制转换为Manager.
问题是,是否有一些元数据记得"bob"是一名经理,即使我已将他作为员工传递给他?代码如何知道他确实可以被投射到经理?堆中有什么东西在进行吗?
我正在尝试(在WPF中):
我在这里尝试了解决方案: 从WPF窗口中删除Icon
这很有效.在http://blogs.msdn.com/b/wpfsdk/archive/2007/08/02/a-wpf-window-without-an-window-icon-the-thing-有一个可下载的相同内容的样本: 你点击到得最系统menu.aspx
但是,如果我将.ico文件添加到.exe的项目属性(属性 - >应用程序 - >图标和清单),它将停止工作.您可以使用可下载的示例尝试此操作.
似乎.exe中的图标也用在模式窗口中(我们在.dll文件中也有),即使该.dll的属性显示为"默认图标".它必须从.exe传递下来.那么,有没有办法在主窗口上显示图标,而不是在子窗口上?
可能更简单的方法是:即使项目的属性中指定了.ico文件,是否可以删除图标?
我发现唯一能工作的是将模态窗口的WindowStye设置为"ToolWindow".这给了我几乎我想要的东西:没有图标和"关闭"按钮(右上角的"x")仍然存在.然而,x是超小的.这是最好的吗?
谢谢你的帮助.