gpt4 book ai didi

c# - 使用C#交互访问 'Internal'类

转载 作者:行者123 更新时间:2023-12-02 02:03:42 24 4
gpt4 key购买 nike

使用 VS2015 中的 C# 交互式控制台,我想访问标记为 internal 的属性和类。通常,这是通过将 InternalsVisibleAttribute 添加到相关项目来完成的。我尝试将 csc.exe 添加为“ friend ”程序集,但仍然存在访问问题。

  1. 这是通过 C# 交互式控制台访问内部类成员的正确方法吗?
  2. 如果是,我需要什么 dll/exe 才能使内部可见?

最佳答案

这是可能的,但我不确定你为什么需要这样做。该类型是内部类型是有原因的。这是如何做到的 -

使用以下代码创建控制台应用程序 -

class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}

添加内部类 -

internal class MyClass
{
internal string MyMethod()
{
return "Hello world!";
}
}

构建您的解决方案。在您的 C# 交互窗口中 -

>#r "C:\Users\...\Project.dll"
>using System;
>using System.Reflection;
>Assembly assembly = >Assembly.LoadFrom("C:\Users\...\Project.dll");
> Object mc = assembly.CreateInstance("AccessInternal.MyClass");
> Type t = mc.GetType();
> BindingFlags bf = BindingFlags.Instance | BindingFlags.NonPublic;
> MethodInfo mi = t.GetMethod("MyMethod", bf);
> string result = (string)mi.Invoke(mc, null);
> Console.WriteLine(result);
Hello world!
>

注意:鉴于这是 C# 交互式窗口,它不会加载目标组件的依赖对象,即,如果您的程序集引用了内部方法中引用的其他程序集,则 C# 交互式将失败执行方法,除非它有权访问这些程序集并可以加载它们。

关于c# - 使用C#交互访问 'Internal'类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38585973/

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