Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何隐藏方法实现细节_C#_Oop - Fatal编程技术网

C# 如何隐藏方法实现细节

C# 如何隐藏方法实现细节,c#,oop,C#,Oop,在c字符串类中,它们隐藏字符串类中所有方法的详细信息。例如,ToLower方法的实现如下所示 /// <summary> /// Returns a copy of this string converted to lowercase. /// </summary> /// /// <returns> /// A string in lowercase. /// </returns> //

在c字符串类中,它们隐藏字符串类中所有方法的详细信息。例如,ToLower方法的实现如下所示

 /// <summary>
    /// Returns a copy of this string converted to lowercase.
    /// </summary>
    /// 
    /// <returns>
    /// A string in lowercase.
    /// </returns>
    /// <filterpriority>1</filterpriority><PermissionSet><IPermission class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Flags="UnmanagedCode"/></PermissionSet>
    [__DynamicallyInvokable]
    public string ToLower();

我怎么能对我自己的班级也这么做呢?并对类的用户隐藏我的实现细节。

您对情况的评估是不正确的

我假设您在选择String.ToLower时在Visual Studio中按F12 Go to definition。这并不总是显示所选符号的源代码-它将仅显示系统上可用的源代码-否则它将根据可用元数据(即.NET程序集文件中声明的公共类型信息)显示包含类型的大纲:非本机.NET.dll和.exe文件

令人困惑的是,如果您查看使用RedGate Reflector或其他CIL反汇编工具的其他字符串方法,那么您将看到,在没有任何源反汇编的情况下:

[MethodImpl(MethodImplOptions.InternalCall), SecuritySafeCritical]
private extern String ReplaceInternal(Char oldChar, Char newChar);

此部分:MyoDimPopop.SnulalCalp意味着没有CIL实现,相反,它在CLR内部实现,大概是在一些高性能的C++或x86汇编代码中。但是,这不适用于ToLower,它实际上有一个CIL实现,但它最终会调用TextInfo.InternalChangeCaseString,这也是InternalCall

关于你自己的评论:

这就是所谓的封装

不,这不是封装。对于OOP使用者,例如System.Collections.Generic.List如何不显示其内部T[]缓冲区。这没什么可做的

现在我的问题是,我怎样才能对我自己的班级也这样做

你不能


当然,如果您不发布程序的源代码,那么Visual Studio中的其他用户(也按F12)也会看到与您相同的结果:只是类大纲-但没有任何东西阻止某人使用Reflector之类的工具来分解它,使用Dotfuscator等工具进行CIL模糊处理只是为了保护您的代码。

这称为封装,但事实并非如此。这甚至不是模糊处理。它只是编写一个头文件,只显示声明而不显示定义。不过这在C中不是一件事。谢谢你,戴,谢谢大家。我知道,我理解答案,我想我问这个问题的方式令人困惑。再次感谢你