C# 接口如何隐藏代码
本文关键字:隐藏 代码 接口 何隐藏 | 更新日期: 2023-09-27 17:57:02
我开发了一个包含接口和继承类的类库:
public interface testInterface
{
string GetAge(int year);
}
以及扩展此接口的类
public class testClass : testInterface
{
public string GetAge(int year)
{
int age = DateTime.Today.Year - year;
return string.Format("Your age is {0}", age);
}
}
在另一个解决方案中,我创建了一个控制台应用程序,并引用了类库 dll。 在驱动程序中,我创建了一个对象:
testClassLibrary1.testInterface obj = new testClassLibrary1.testClass();
我称该方法为 GetAge();当我调试时,我仍然可以看到方法getAge()的代码如何隐藏此代码?我的意思是接口不是用来隐藏方法抽象的吗?请指教。
您根本无法将调试信息 (*.pdb) 传递给使用 dll 的一方。
但是,该接口旨在对编译器隐藏实现。您可以更改它,程序仍将编译,因为它不依赖于它。当您激活单个实现时,调试它非常有用。
接口是一种抽象事物的方式,而不是隐藏或保护事物的方式。
我认为这
在通过接口的默默无闻不是安全性的方法中是不可能的。
正如@nvoigt所说,您唯一能做的就是不要在 dll/package 中包含任何符号(*.pdb 文件)。
但请记住,您正在编写托管代码,任何使用托管代码反编译器工具(如 Reflector 或 DotPeek)的人都可以轻松检查代码。
一个可能的解决方案是混淆你的代码,以便更难看到你在做什么,但你永远无法真正阻止人们反编译它。有志者事竟成
永远无法在调试模式下隐藏代码。执行此操作的唯一方法是让代码在你正在运行的 Visual Studio 应用程序的范围之外执行。
仅供参考:在编程接口级别隐藏代码可见性方面,有多种选项可用,例如"new"关键字用于隐藏派生成员,以及在更基本的级别上,您的类、属性和方法的各种保护级别,例如内部、受保护等。