草庐IT

c# - 查找所有父类型(包括基类和接口(interface))

我希望能够找到特定类型的所有父类型(基类和接口(interface))。EG如果我有classA:B,C{}classB:D{}interfaceC:E{}classD{}interfaceE{}我想知道A是BCDandEandObject最好的方法是什么?有没有一种反射(reflection)方法可以做到这一点,或者我需要自己做点什么。====编辑====是这样的吗?publicstaticIEnumerableParentTypes(thisTypetype){foreach(Typeiintype.GetInterfaces()){yieldreturni;foreach(Typ

c# - 覆盖基类中定义的属性

我有类层次结构是这样的情况,+---------------+|UIElement||---------------|+----------------------+|...||MyWindowsApplication|SomePropert{}||----------------------|||现在在我的应用程序(以及我可以导出此MyUserControl的所有其他应用程序)中,我可以设置由MyUserControl类而不是处理的SomePropertyUIElement?我现在通过为MyUserControl创建一个对象并将其分配给我在我的xaml页面中添加的控件来执行此操作。所

c# - 不能在派生类的 IEnumerable 基类上使用 LINQ 方法

我正在尝试实现IEnumerable在派生自已实现IEnumerable的基类的类中.为什么会调用base.Cast()(或基本元素上的任何LINQ方法)在类Turtle的任何方法中编译失败?不可能替换base与this因为它显然会导致StackOverflowException.以下是重现该问题的最小代码示例:publicinterfaceIAnimal{}publicclassAnimal:IAnimal{}publicclassTurtle:Animal{}publicclassAnimalEnumerable:IEnumerable{ListAnimals=newList();

c# - 强制派生类使用参数实现基类构造函数

是否可以对需要实现构造函数(带参数)的派生类强制执行编译时契约?我有一个基类,它的构造函数需要一个参数:publicclassFooBase{protectedintvalue;publicFooBase(intvalue){this.value=value;}publicvirtualvoidDoSomething(){thrownewNotImplementedException();}}我想强制派生我的基类来实现相同的构造函数:publicclassFoo:FooBase{publicFoo(intvalue):base(value){}publicoverridevoidDoS

C# 从基类隐藏、覆盖和调用函数

我正在学习C#,但遇到了以下问题。我有两个类:基类和派生类:classMyBase{publicvoidMyMethod(){Console.WriteLine("MyBase::MyMethod()");}}classMyDerived:MyBase{publicvoidMyMethod(){Console.WriteLine("MyDerived::MyMethod()");}}目前,没有virtual和override关键词。当我编译它时,我收到警告(这当然是预期的)我试图从MyBase类中隐藏MyMethod。我想做的是从具有派生类实例的基类调用方法。我这样做是这样的:MyDe

c# - 如何获取基类的公共(public)静态方法?

我的基类有一个公共(public)静态方法,但是当我调用typeof(TDerived).GetMethods(BindingFlags.Public|BindingFlags.Static)时,我的方法没有返回。(TDerived当然以某种方式继承self的基类)。我在此查询的位置没有对我的基类的引用。我做错了什么? 最佳答案 使用BindingFlags.FlattenHierarchy标志:typeof(TDerived).GetMethods(BindingFlags.Public|BindingFlags.Static|B

c# - 让类将自身作为参数传递给泛型基类是邪恶的吗?

我第一次看到一位同事在实现对象池时这样做。他将要被池化的类作为参数传递给通用基类。这个基类列出了池化代码。奇怪的是基类会知道它的子类。在每个正常情况下,这都被认为是不好的做法。但在这种情况下,parent只是一种避免编写重复代码的技术解决方案。基类永远不会被任何其他代码引用。这种构造的一个缺点是它“烧掉了基类”。您不能在层次结构的中间引入通用基类。这个问题可能超出了主题。下面是一个可以想象的例子:publicabstractclassSingletonwhereT:class{publicstaticTInstance{get;privateset;}publicSingleton()

C#调用基类构造函数

publicCArm(Vector3at,stringname):base(name){}除了:base(name)之外,还有其他方法可以在括号内调用基础父构造函数吗?我不确定这是否是另一种语言,但我记得在构造函数中使用类似super();的方法来调用基类。谢谢。 最佳答案 不可以,您不能在C#中的构造函数体内调用基类构造函数。您可能正在考虑Java的语法。您可以通过调用方法来模拟所需的行为。只需确保在调用虚拟方法时非常小心! 关于C#调用基类构造函数,我们在StackOverflow上

c# - 使用 TypeBuilder 为基类创建传递构造函数

假设我有一个SpaceShip类,如下所示:publicclassSpaceShip{publicSpaceShip(){}publicSpaceShip(IRocketFuelSourcefuelSource){}}我想使用TypeBuilder在运行时创建一个继承自SpaceShip的类型,并为SpaceShip中的每个类型定义一个构造函数。除了将参数传递给父级(“直通”构造函数)之外,我不需要构造函数实际做任何事情。例如,如果用C#表示,生成的类型将如下所示:publicclassSpaceShipSubClass:SpaceShip{publicSpaceShipSubClas

C#:如何从派生类的静态方法调用基类的静态方法?

在C#中,我有基类Product和派生类Widget。产品包含静态方法MyMethod()。我想从静态方法Widget.MyMethod()调用静态方法Product.MyMethod()。我不能使用base关键字,因为它只适用于实例方法。我可以显式调用Product.MyMethod(),但如果我稍后将Widget更改为从另一个类派生,我必须修改该方法。C#中是否有一些类似于base的语法允许我从派生类的静态方法调用基类的静态方法? 最佳答案 static方法基本上是一种从面向对象概念回退的方法。因此,它们在继承层次结构中不是很灵