小编Nic*_* R.的帖子

当一个对象被强制转换为基类时,它如何记住它的真实含义?

这是初学者的问题,但我有兴趣了解这里发生了什么.我的问题是,当你向下投射一个物体时幕后会发生什么?它是否保留了关于它最初的内容的某种元数据?这就是我的意思:

假设我有一个名为"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"是一名经理,即使我已将他作为员工传递给他?代码如何知道他确实可以被投射到经理?堆中有什么东西在进行吗?

c# casting

23
推荐指数
2
解决办法
2566
查看次数

WPF - 从模态窗口中删除系统菜单图标,但不是主应用程序窗口

我正在尝试(在WPF中):

  1. 有一个.exe文件,显示系统菜单图标(窗口左上角的图标),就像正常一样
  2. 没有此图标显示在此应用程序调用的模态窗口中

我在这里尝试了解决方案: 从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是超小的.这是最好的吗?

谢谢你的帮助.

wpf icons menu system

3
推荐指数
1
解决办法
2454
查看次数

标签 统计

c# ×1

casting ×1

icons ×1

menu ×1

system ×1

wpf ×1