C#跨程序集访问public类型成员编译报错如何解决
报错原因
本次报错和跨程序集的public成员访问权限无关,属于C#基础语法错误:
- C#中类的直接作用域内仅允许定义字段、属性、方法、事件等类成员,不支持直接编写可执行的业务逻辑语句
- 你写的
instance.Print();是方法调用的执行语句,不能直接放在AssemblyTwoClassOne类的根层级下,必须放入构造函数、普通方法、属性访问器等代码块内部才能正常执行。
你对public访问修饰符的理解是正确的,只要提前给AssemblyTwo项目添加AssemblyOne的程序集引用,public成员完全支持跨程序集访问。
解决方法
按需选择以下任意一种方案修改AssemblyTwo的代码即可:
方案1:将调用逻辑放入构造函数
类实例化时会自动执行Print方法:
using System; using AssemblyOne; namespace AssemblyTwo { public class AssemblyTwoClassOne { AssemblyOneClassOne instance = new AssemblyOneClassOne(); // 构造函数内部允许写执行语句 public AssemblyTwoClassOne() { instance.Print(); } } }
方案2:将调用逻辑放入自定义方法
需要主动调用自定义方法时才会执行Print方法:
using System; using AssemblyOne; namespace AssemblyTwo { public class AssemblyTwoClassOne { AssemblyOneClassOne instance = new AssemblyOneClassOne(); // 自定义普通方法 public void InvokePrint() { instance.Print(); } } }
内容的提问来源于stack exchange,提问作者Abdullah Khan
相关产品推荐
相关产品推荐

