来自 威尼斯国际官方网站 2019-10-18 23:15 的文章
当前位置: 威尼斯国际官方网站 > 威尼斯国际官方网站 > 正文

哪个人改了小编的代码,合併代码文件

本文告诉大家一个特殊的做法,可以修改一个字符串常量

如果有相同的类,一般可以使用 partial 让他写在多个文件,那么如何把多个文件合并?请看 MainWindow.xaml 和 MainWindow.xaml.cs 其中 代码文件被折叠,那么如何做代码的折叠

我们来写一个简单的程序,把一个常量字符串输出

简单的方法,使用 SublimeText 打开 工程文件,当然 如果使用 VSC 也是可以,但是因为我用了 SublimeText 比较顺,所以就推荐使用。我收藏很多的工具,大家可以在我的博客看到。

        private const string str = "lindexi";
        static void Main(string[] args)
        {
            Foo();
            Console.WriteLine(str);
        }

工程文件就是创建一个工程自动生成的,如果创建一个空白的程序,那么就可以从创建的文件夹看到这个文件

其中的 Foo 是其他的函数,大家可以猜到输出是 lindexi ,但是,实际上把Foo调用函数添加之后,输出是 Lindexi 被大写了。那么这时 Foo 做了什么?

图片 1

Foo 做的就是
C# 字符串首字符大写

使用 SublimeText打开,可以看到他里面包含了很多文件

        public static unsafe void Foo()
        {
            fixed (char* ptr = str)
            {
                *ptr = char.ToUpper(*ptr);
            }
        }
    <Compile Include="MainWindow.xaml.cs">
      <DependentUpon>MainWindow.xaml</DependentUpon>
      <SubType>Code</SubType>
    </Compile>

虽然出现了问题,但是找到问题很简单,如果这时需要做一个安全有关的。让别人看到源代码也不知道怎么使用,那么就可以使用这个科技,下面就是显示技术的时候

那么这时如果创建一个类,请看下面的代码

我把 Foo 做一些修改,把 str 变量去掉,这样大家就难以通过搜索变量引用找到了这个函数。但是我在其他的某个地方使用了这个常量字符串,于是就把上面的 str 修改为 "lindexi" 。大家也许会想,这是两个变量,对他做什么修改也不会对之前的 str 有什么影响。实际上,请跑一下下面的代码。

    public partial class Kapen
    {
        public int Leroy { get; set; }
    }

    public partial class Kapen
    {
        public Kapen()
        {
        }

        public string a { get; set; }
    }
        public static unsafe void Foo()
        {
            fixed (char* ptr = "lindexi")
            {
                *ptr = char.ToUpper(*ptr);
            }
        }

把上面的代码放到两个文件,那么可以看到在解决方案存在两个文件,接下来就要把他们放在一起

这时输出 str 结果是 Lindexi ,因为编译器把相同的常量视为同一个地址,这样修改一个地方的常量就可以修改其他地方的。所以可以写的是一个常量,实际上这个常量在另一个地方被修改。

图片 2

如果我代码很多,在某个地方使用了反射,反射一个方法,这个方法是修改一个常量的值,常量是写自己写的,没有引用。这时可以发现代码执行就可以更改之前的字符串值。实际上不只字符串,其它的常量也可以修改。多使用这些技术,可以让看代码的人成为强大的杀人狂。

可以看到在刚才打开的工程文件,有这样的代码

这个方法是不推荐在一般情况使用,因为谁都不能说没有其他地方使用一样的字符串。

    <Compile Include="Kapen.cs" >

    </Compile>
    <Compile Include="Kapen1.cs" >

    </Compile>

本文由威尼斯国际官方网站发布于威尼斯国际官方网站,转载请注明出处:哪个人改了小编的代码,合併代码文件

关键词: