将扩展方法与运行时程序集一起使用

发布于 2024-09-20 00:03:52 字数 568 浏览 3 评论 0原文

有没有办法在使用 Reelection.Emit 动态创建的类上使用扩展方法?例如:

 class somewhere
 {
     somewhere()
     {
         // define the type here using ReflectionEmit, etc.
         Type tableType = CreateTableType(...table parameters...);

         var table = Activator.CreateInstance(tableType);
         table.Shuffle();
     } 
 }

 //... elsewhere
 public class static TableTypeExtensions   
 {
      public static Table Shuffle( this Table t)  
      {   
          ...
      }
 }

但我没有名称为“Table”的类,只有 Type tableType 可用。
有什么办法可以解决这个问题吗?
谢谢

Is there any way to use extension methods on a class that has been dynamically created using Relection.Emit? For example:

 class somewhere
 {
     somewhere()
     {
         // define the type here using ReflectionEmit, etc.
         Type tableType = CreateTableType(...table parameters...);

         var table = Activator.CreateInstance(tableType);
         table.Shuffle();
     } 
 }

 //... elsewhere
 public class static TableTypeExtensions   
 {
      public static Table Shuffle( this Table t)  
      {   
          ...
      }
 }

But I don't have the class by name "Table", only Type tableType available.
Is there any way around this?
Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

御弟哥哥 2024-09-27 00:03:53

使动态类实现一个接口(如果需要,可以是空接口),并向该接口添加扩展。

Make the dynamic class implement an interface (an empty one if you want), add extensions to the interface.

童话 2024-09-27 00:03:53

为您的 TableType 定义一个公共基类并在其上定义扩展方法。这样,您的扩展方法也应该可用于派生类。

Define a common base class for your TableType and define the extension method on that. This way your extension method should be available for the derived classes as well.

独闯女儿国 2024-09-27 00:03:53

让我们看看你在问什么。

您询问如何让扩展方法对您的对象实例进行操作。

显然,要使其起作用,它必须是一个Table,否则你的问题就没有意义。

因此,只需将其转换为 Table:

var table = (Table)Activator.CreateInstance(tableType);

然后您就可以调用您的扩展方法了。

Let's look at what you're asking.

You're asking how to get the extension method to operate on your object instance.

Obviously, for this to work, it has to be a Table, otherwise your question makes no sense.

So just cast it to Table:

var table = (Table)Activator.CreateInstance(tableType);

and you can call your extension method just fine.

挽清梦 2024-09-27 00:03:53

在您的 somewhere 代码中,您是否引用了 Table 类型?如果是这样你可以:

 Type tableType = CreateTableType(...table parameters...);

 var table = Activator.CreateInstance(tableType) as Table;
 table.Shuffle();

In your somewhere code do you have reference to the type Table? If so you can:

 Type tableType = CreateTableType(...table parameters...);

 var table = Activator.CreateInstance(tableType) as Table;
 table.Shuffle();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文