我正在使用一个虚构的例子.说,我有一个Widget类,如:
abstract class Widget
{
Widget parent;
}
Run Code Online (Sandbox Code Playgroud)
现在,我的其他类将从这个Widget类派生,但是假设我想在定义派生类型时在类中加入一些约束,这样只有特定类型的小部件才能成为特定类型的Widget的父类.
例如,我从Widget类,WidgetParent和WidgetChild派生了两个小部件.在定义子类时,我想将父类型定义为WidgetParent,这样我每次使用它时都不必输入父类.
确切地说,我希望做的是:
// This does not works!
class Widget<PType>: where PType: Widget
{
PType parent;
}
class WidgetParent<Widget>
{
public void Slap();
}
class WidgetChild<WidgetParent>
{
}
Run Code Online (Sandbox Code Playgroud)
因此,当我想访问WidgetChild的父级时,而不是以这种方式使用它:
WidgetParent wp = wc.parent as WidgetParent;
if(wp != null)
{
wp.Slap();
}
else throw FakeParentException();
Run Code Online (Sandbox Code Playgroud)
我想以这种方式使用它(如果我可以使用泛型):
wc.parent.Slap();
Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我有一个在后台线程上运行的任务.当在UI线程中显示MessageBox或任何模态对话框时,我需要在后台线程中发出通知.
虽然我可以通过在显示MessageBox之前调用某个函数来手动完成它,但是如果我不需要它会很棒.
例如:
backgroundThread.MessageShown(); // I do not want to call this explicitly every time!
MessageBox.Show("Task halted!");
Run Code Online (Sandbox Code Playgroud)
我猜我可能会有一些信息可以挂钩.即使在主GUI线程中,是否有任何消息/事件在显示模式对话框之前被触发?
好的,这是要求.我有一些在UI线程上完成的任务,我必须在一个单独的对话框上显示进度,该对话框已在工作线程上显示.我知道它应该是必须在工作线程上完成的任务,但目前的情况暂时无法改变.
除了一个小故障外,每件事情都运行良好 - 如果UI线程中显示了一个消息框,它将隐藏在进度对话框下方.因此,用户永远不会知道UI正在等待输入.我需要一种方法来通知已显示模式对话框,我应该隐藏进度对话框.
现在,我必须在每次调用MessageBox之前显式隐藏它.
我希望这可以解释.
或者为此目的是否有更适合的第三方控制?
我在asp.net 2.0中创建了一个Web应用程序.这在我的本地机器上工作正常.但是,当尝试在具有Windows 2003服务器的服务器上部署它时,我收到错误:
说明:解析为此请求提供服务所需的资源时发生错误.请查看以下特定的解析错误详细信息并相应地修改源文件.
分析器错误消息:文件'/MasterPage.master'不存在.
来源错误:
Line 1: <%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Title="LinkChecker Home " %>
Line 2: <asp:Content ID="Content1" ContentPlaceHolderID="MainContent" Runat="Server">
Line 3:
Run Code Online (Sandbox Code Playgroud)
源文件: /LinkChecker/Default.aspx 行:1
知道如何解决这个问题吗?
我是LINQ的绝对初学者.
可以GetAnimals<T>()用LINQ编写代码吗?
ObservableCollection<Animal> allAnimals = new ObservableCollection<Animal>();
public IEnumerable<T> GetAnimals<T>() where T: Animal
{
foreach (var animal in allAnimals)
if (animal.GetType() == typeof(T))
yield return (T)animal;
}
Run Code Online (Sandbox Code Playgroud)