我开发了一个包含接口和继承类的类库:
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() 如何隐藏此代码?我的意思是不是用于隐藏方法抽象的接口?请指教。
答案 0 :(得分:3)
您可能根本无法将调试信息(* .pdb)传递给使用该DLL的一方。
但是,该接口旨在隐藏编译器的实现。您可以更改它,程序仍然会编译,因为它不依赖于它。如果你有一个单独的实现,那么调试它就非常有用。
接口是抽象事物的一种方式,而不是隐藏或保护事物。
答案 1 :(得分:1)
我不认为这可能是一种非security through obscurity接口的方法。
答案 2 :(得分:1)
正如@nvoigt所说,你唯一能做的就是不要在你的dll /包中包含任何符号(* .pdb文件)。
但请记住,您正在编写托管代码,而使用像Reflector或DotPeek这样的托管代码反编译工具的任何人都可以轻松地检查代码。
一种可能的解决方案是对代码进行模糊处理,以便让您更难看到自己在做什么,但却无法真正阻止人们对其进行反编译。哪有遗嘱......
答案 3 :(得分:1)
您永远不能将代码隐藏在调试模式下。唯一的方法是让代码在您正在运行的Visual Studio应用程序范围之外执行。
仅供参考:在隐藏编程接口级别的代码可见性方面,有各种可用选项,例如' new'隐藏派生成员的关键字,以及更基本的级别,类,属性和方法的各种保护级别,例如:内部,受保护等