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()的代码如何隐藏此代码?我的意思是接口不是用来隐藏方法抽象的吗?请指教。

C# 接口如何隐藏代码

您根本无法将调试信息 (*.pdb) 传递给使用 dll 的一方。

但是,该接口旨在对编译器隐藏实现。您可以更改它,程序仍将编译,因为它不依赖于它。当您激活单个实现时,调试它非常有用。

接口是一种抽象事物的方式,而不是隐藏或保护事物的方式。

我认为这

在通过接口的默默无闻不是安全性的方法中是不可能的。

正如@nvoigt所说,您唯一能做的就是不要在 dll/package 中包含任何符号(*.pdb 文件)。

但请记住,您正在编写托管代码,任何使用托管代码反编译器工具(如 Reflector 或 DotPeek)的人都可以轻松检查代码。

一个可能的解决方案是混淆你的代码,以便更难看到你在做什么,但你永远无法真正阻止人们反编译它。有志者事竟成

...

永远无法在调试模式下隐藏代码。执行此操作的唯一方法是让代码在你正在运行的 Visual Studio 应用程序的范围之外执行。

仅供参考:在编程接口级别隐藏代码可见性方面,有多种选项可用,例如"new"关键字用于隐藏派生成员,以及在更基本的级别上,您的类、属性和方法的各种保护级别,例如内部、受保护等。