jjzjj

c# - 将 Generic<Derived> 转换为 Generic<Base>

这个问题在这里已经有了答案:CannotconvertfromListtoList(6个答案)InC#,whycan'taListobjectbestoredinaListvariable(14个答案)关闭1年前。我有一个基本的WPFUserControl,它处理派生的UserControl的一些常见功能。在任何派生的UserControl的代码隐藏中,我调用一个事件privatevoidSomeClick(objectsender,RoutedEventArgse){HandleClick(sender);MyDataGrid.Items.Refresh();}在我的基本UserCo

c# - 虚方法的重载解析

考虑代码publicclassBase{publicvirtualintAdd(inta,intb){returna+b;}}publicclassDerived:Base{publicoverrideintAdd(inta,intb){returna+b;}publicintAdd(floata,floatb){return(Int32)(a+b);}}如果我创建Derived类的实例并使用int类型的参数调用Add为什么它调用带有float参数的Add方法Derivedobj=newDerived()obj.Add(3,5)//whythisiscallingAdd(floata,

c# - VS2010 'Show Derived Types' 类 View 中缺少选项

我正在VisualStudio2010中处理VisualC#项目,并在类View中浏览各种类型。根据this文档中,类View设置菜单中应该有一个类似于“显示基本类型”选项的“显示派生类型”选项。然而,它似乎不见了。我还没有设法找到任何错误报告或对这个问题的引用,所以我想知道我是否只是遗漏了一些东西。 最佳答案 我在VisualStudio2010中看到它,这是一个具有派生类型的C++项目。但是,在使用派生类型提到的C#项目中,未提供此选项。我正在检查一个没有派生类型的项目,看看这是否会导致该选项被禁用。编辑:似乎没有派生类型的项目

c# - 泛型的奇怪使用

经过一些编程之后,我的一个类以一种我以前从未见过的方式使用了泛型。我想对此提出一些意见,无论它是否是糟糕的编码。abstractclassBase:whereT:Base{//omittedmethodsandproperties.virtualvoidCopyTo(Tinstance){/*code*/}}classDerived:Base{overridevoidCopyTo(Derivedinstance){base.CopyTo(instance);//copyremainingstuffhere}}这是否可以使用泛型?我主要在考虑对“自身”的约束。有时我觉得泛型会“爆炸”到我

c# - C# 中方法重载的不同行为

我在浏览C#脑筋急转弯(http://www.yoda.arachsys.com/csharp/teasers.html)时遇到了一个问题:这段代码的输出应该是什么?classBase{publicvirtualvoidFoo(intx){Console.WriteLine("Base.Foo(int)");}}classDerived:Base{publicoverridevoidFoo(intx){Console.WriteLine("Derived.Foo(int)");}publicvoidFoo(objecto){Console.WriteLine("Derived.Foo(

c# - 新的关键字和方法隐藏

new关键字用于隐藏相同的基类实现。但是我不确定为什么下面的代码会产生Baseclass的输出classBaseclass{publicvoidfun(){Console.Write("Baseclass"+"");}}classDerived1:Baseclass{newvoidfun(){Console.Write("Derived1class"+"");}}classDerived2:Derived1{newvoidfun(){Console.Write("Derived2class"+"");}}classProgram{publicstaticvoidMain(string[

c# - 为什么调用这个方法?

usingSystem;namespaceConsoleApplication1{classProgram{staticvoidMain(string[]args){vara=newDerived();intx=123;a.Foo(x);}}publicclassBase{publicvirtualvoidFoo(intx){Console.WriteLine("Base::Foo");}}publicclassDerived:Base{publicoverridevoidFoo(intx){Console.WriteLine("Derived::Foo(intx)");}public

c# - 无法将类型 'Task<Derived>' 转换为 'Task<Interface>'

我有以下带有委托(delegate)参数的函数,它接受一个接口(interface)的类型并返回另一个接口(interface)的任务。publicvoidBar(Func>func){thrownewNotImplementedException();}我还有一个带有参数的函数作为IMessage的实例并返回一个任务。Message和Result是IMessage的实现和IResult分别。privateTaskDoSomething(Messagem){returnnewTask(()=>newResult());}当我将DoSomething传递到Bar时收到错误。Bar(m=>

c# - 如何用重载和覆盖方法来解释这种行为?

这个问题在这里已经有了答案:Overloadresolutionandvirtualmethods(5个答案)关闭8年前。谁能如此友善并向我解释为什么此代码显示Derived.DoWork(double)。我可以对这种行为提出一些解释,但我希望有人为我澄清这一点。usingSystem;publicclassBase{publicvirtualvoidDoWork(intparam){Console.WriteLine("Base.DoWork");}}publicclassDerived:Base{publicoverridevoidDoWork(intparam){Console.

c# - "where NOT derived from"是否有通用类型约束?

我们可以像这样对泛型类型参数指定一个“派生自”约束:classBarwhereT:IFooGenerator有没有办法指定不是派生自?我的用例:我有一堆FooGenerators是可并行化的,每个都具有相同的并行化代码,但我们不希望它们总是被并行化。publicclassFooGenerator:IFooGenerator{publicFooGenerateFoo(){...}}因此,我创建了一个用于并行生成Foo的通用容器类:publicclassParallelFooGenerator:IFooGeneratorwhereT:IFooGenerator{publicFooGener