2016-07-15 129 views
0

我开发含有一个接口和一个继承的类的类库:C#接口如何隐藏代码

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

+1

你永远无法真正隐藏代码,所以你不必为此烦恼。即使你把它放在一个单独的程序集中,并有一个接口引用它,用户可以拆卸DLL。 至于使用polymorphed变量:这只会改变编译器如何处理变量,而不是如何作为用户可以物理检查它。 –

+0

我的意思是我希望在标题中显示:[来自元数据],并且当调试器到达元数据中的方法时,我无法查看方法的代码 –

回答

3

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

但是,接口是为了隐藏编译器的实现。你可以改变它,程序仍然会编译,因为它不依赖它。当你有一个单独的实现活动时,调试它是非常有用的。

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

+0

我的意思是我希望在标题中显示:[from元数据],当调试器到达元数据中的方法时,我无法查看方法的代码 –

+2

@Samer_Azar通过不传送* .pdb文件,可以使用户更加困难。但他仍然可以完美地反编译你的代码。如果您需要真正的安全性,唯一的方法是不向您的用户提供*任何*代码,而是让您的用户可以调用的某种服务在您控制的环境中运行。 – nvoigt

1

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

+0

我的意思是我希望这显示在标题中:[来自元数据],并且当调试器到达元数据中的方法时,我无法查看方法的代码 –

1

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

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

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

+0

我的意思是我希望显示在标题中:[from元数据],当调试器到达元数据中的方法时,我无法查看方法的代码 –

1

你永远无法从调试模式隐藏你的代码。唯一的方法就是让代码在你运行的Visual Studio应用程序的范围之外执行。提供:在编程接口级隐藏代码可见性方面,提供了各种选项,例如用于隐藏派生成员的'new'关键字,以及更基本的级别,用于您的类,属性的各种保护级别和方法,例如内部的,受保护的等等。

+0

我的意思是我希望在标题中显示:[from metadata],并且当调试器在元数据中到达该方法时,我无法查看该方法的代码 –