C#界面如何隐藏代码

时间:2016-07-15 10:37:10

标签: c# interface

我开发了一个包含接口和继承类的类库:

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

4 个答案:

答案 0 :(得分:3)

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

但是,该接口旨在隐藏编译器的实现。您可以更改它,程序仍然会编译,因为它不依赖于它。如果你有一个单独的实现,那么调试它就非常有用。

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

答案 1 :(得分:1)

我不认为这可能是一种非security through obscurity接口的方法。

答案 2 :(得分:1)

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

但请记住,您正在编写托管代码,而使用像Reflector或DotPeek这样的托管代码反编译工具的任何人都可以轻松地检查代码。

一种可能的解决方案是对代码进行模糊处理,以便让您更难看到自己在做什么,但却无法真正阻止人们对其进行反编译。哪有遗嘱......

答案 3 :(得分:1)

您永远不能将代码隐藏在调试模式下。唯一的方法是让代码在您正在运行的Visual Studio应用程序范围之外执行。

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