无法访问另一个程序集中的公共类型成员。我有两个程序集,我想从另一个程序集中的一个程序集访问公共成员

Posted

技术标签:

【中文标题】无法访问另一个程序集中的公共类型成员。我有两个程序集,我想从另一个程序集中的一个程序集访问公共成员【英文标题】:Unable to access public type members in another assembly. I have two assemblies, I want to access public members from one assembly in another assembly 【发布时间】:2021-12-04 02:57:17 【问题描述】:
using System;

namespace AssemblyOne


    public class AssemblyOneClassOne
    
        protected internal int ID = 101;
        public int id = 102;
        public void Print() 
        
            Console.WriteLine("Abdullah is a handsome hunk!");
        
    
    public class AssemblyOneClassTwo 
    
        public void SampleMethod() 
        
            AssemblyOneClassOne a1 = new AssemblyOneClassOne();
            Console.WriteLine(a1.ID);
        
    
    public class A
     
        public static void Main()
        
            AssemblyOneClassTwo a2 = new AssemblyOneClassTwo();
            a2.SampleMethod();
            Console.ReadKey();
        
    

using System;
using AssemblyOne;

namespace AssemblyTwo



    public class AssemblyTwoClassOne
     
        AssemblyOneClassOne instance = new AssemblyOneClassOne();
        instance.Print();//Over here I am getting compile time error, 'instance' does not exist in the current context, 'instance.Print' does not exist in the current context
    

据我所知,公共类型可以在同一个程序集以及另一个程序集中的任何地方访问

【问题讨论】:

instance.Print(); 位于 AssemblyTwoClassOne 类的根目录中。那应该在方法或构造函数之类的内部 【参考方案1】:

是的,可以从另一个程序集访问公共类型,但您的方法 Print() 应该在类 AssemblyTwoClassOne 的方法中调用。

类似的东西-

namespace AssemblyTwo

    public class AssemblyTwoClassOne
    
        AssemblyOneClassOne instance = new();
        public void Method() => instance.Print();
    

【讨论】:

以上是关于无法访问另一个程序集中的公共类型成员。我有两个程序集,我想从另一个程序集中的一个程序集访问公共成员的主要内容,如果未能解决你的问题,请参考以下文章

C#“动态”无法访问在另一个程序集中声明的匿名类型的属性

C#语言中的修饰符汇总

.Net中受保护的内部意味着啥[重复]

访问修饰符

访问修饰符,命名空间

C#访问修饰符