gpt4 book ai didi

c# - 如何从基类中获取对派生类实例的引用

转载 作者:太空宇宙 更新时间:2023-11-03 11:47:19 25 4
gpt4 key购买 nike

.Net 3.5,使用 C#

我有一个类 (A) 的实例,它是通过派生类 (B) 的虚方法调用的。在方法(类 A 的方法)中,我发现了进行调用的类 B 的类型,并使用反射检查了类 B 并发现了一个我想要访问其值的属性。

有没有什么办法可以通过反射得到B类的实例引用?我拥有的唯一对象是我的“this”引用。

[编辑]

通过解释我并不完全需要这样做:我的类(class)是 T4NmpBase(A 级)。我无法控制我继承的类 (TextTransformation) 或继承 self 的类 (TextTemplating - B 类)。如果“Host”属性退出,我想使用它,但不想给编写生成 TextTransformation 类的文本模板代码的程序员带来任何负担。

//
// this is my class
//
public abstract partial class T4NmpBase : Microsoft.VisualStudio.TextTemplating.TextTransformation {

public override void Initialize()
{
//
// determine derived class info and get value of "Host" property if it exists
//
}

}


//
// this class is generated by T4 in a project that I have no control over
//
[System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.TextTemplating", "10.0.0.0")]
public partial class PPTest : T4_NMP_Base.T4NmpBase {

public virtual global::Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost Host { ... }

public override void Initialize()
{
base.Initialize();
}
}

最佳答案

在您的情况下(假设我遵循正确)您的this 引用确实是您的类 (B) 类型,因此您可以使用它来获取属性的值.所以,为了确保我遵循正确,你有一些看起来像的东西:

public class ClassA
{
public virtual void VirtualMethod()
{
// Do your property investigation here
}
}

public class ClassB: ClassA
{
public override void VirtualMethod()
{
// Code for ClassB
}
}

并且您正在使用类似以下内容调用虚拟方法:

ClassA instance = new ClassB();
instance.VirtualMethod()

因此,如果是这种情况,那么您应该能够通过以下方式获取该属性的值:

PropertyInfo proeprtyOnClassB // Assume you got this already via reflection
object propertyValue = propertyOnClassB.GetGetMethod().Invoke(this,null);

关于c# - 如何从基类中获取对派生类实例的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3081381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com