C#重要知识归纳总结

news2025/4/7 16:32:35

C#教程

C# 结构体(Struct) | 菜鸟教程C# 结构体(Struct) 在 C# 中,结构体(struct)是一种值类型(value type),用于组织和存储相关数据。 在 C# 中,结构体是值类型数据结构,这样使得一个单一变量可以存储各种数据类型的相关数据。 struct 关键字用于创建结构体。 结构体是用来代表一个记录,假设您想跟踪图书馆中书的动态,您可能想跟踪每本书的以下属性: Title Author Subject Book ID 定义结构体 为了定义一..icon-default.png?t=N7T8https://www.runoob.com/csharp/csharp-struct.html

C#常用的快捷键

对齐代码:ctrl+k+d 注意代码不能出现语法错误

弹出智能提示:ctrl+j

光标最前/最后切换选中状态:shift+end;shift+home 上/下

注释选中代码:ctrl+k+c

取消注释选中代码:ctrl+k+u

折叠冗余代码:#region 后面写说明 #endregion

查看源代码:F12

高亮查询:ctrl+shift+上/下

查看方法都在哪使用了:shift+F12

一次修改多个变量的名称:F2

构建代码:F6

运行代码:F5

逐行调试:F10

逐过程调试:F11(可以进入方法体)

移动代码:alt+上/下

多行修改:alt+鼠标拖动

删除整行:shift+del

选中部分代码自动生成方法:ctrl+R+M

快速生成构造函数:ctor tab

快速引入命名空间:alt+shift+F10

ctrl+R+G清理未使用的命名空间

ctrl+L 删除整行代码

region的用法:

选中想要折叠的代码,ctrl+K+S

值类型和引用类型区别

值类型:int、double、bool、char、decimal、struct、enum

引用类型:string(不可变)、自定义类、数组

存储:

值类型的值是存储在内存的栈当中。

引用类型的值是存储在内存的堆中。

字符串的使用

  • 可以将string类型,看做是char类型的一个只读数组,如str[索引]值为一个字符类型
  • 字符串转字符数组:char[] chs = str.ToCharArray();
  • 字符数组转字符串:string str=new string(chs);
  • 比较2个字符串(可忽略大小写):str1.Equals(str2,StringComparison.OrdinalIgnoreCase);
  • 分割字符串(返回字符串类型的数组):str.Splite(字符数组,StringSplitOptions.RemoveEmptyEntries);//第二个参数可以去除空格字符串数组
  • 截取指定字符串:str.Substring(index,要截取的个数);
  • 判断字符串出现的位置:str.IndexOf();
  • 判断字符串以....开始:str.StartsWith();
  • 替换字符串:str.Replace(old,new);
  • 去除前后空格:str.Trim();
  • 去除开始/结束空格:str.TrimStart()/str.TrimEnd();
  • 判断是否包含某个字符串:str.Contains();
  • string.IsNullOrEmpty():判断一个字符串是否为空或者为null
  • string.Join("连接符字符串",数组):将数组按照指定的字符串连接,返回一个字符串。

string类型的常用方法

ToCharArray()——将字符串转换为char数组

new string(char[] chs)——能够将char数组转换为字符串

Length——获得当前字符串中字符的个数

ToUpper()——将字符转换成大写形式

ToLower()——将字符串转换成小写形式

Equals(lessonTwo,StringComparison.OrdinalIgnoreCase)——比较两个字符串,可以忽略大小写

Split()——分割字符串,返回字符串类型的数组。

Substring()——解决字符串。在截取的时候包含要截取的那个位置。

IndexOf()——判断某个字符串在字符串中第一次出现的位置,如果没有返回-1、值类型和引用类型在内存上存储的地方不一样。

LastIndexOf()——判断某个字符串在字符串中最后一次出现的位置,如果没有同样返回-1

StartsWith()——判断以....开始

EndsWith()——判断以...结束

Replace(old,new)——将字符串中某个字符串替换成一个新的字符串

Contains()——判断某个字符串是否包含指定的字符串

Trim()——去掉字符串中前后的空格

TrimEnd()——去掉字符串中结尾的空格

TrimStart()——去掉字符串中前面的空格

string.IsNullOrEmpty()——判断一个字符串是否为空或者为null

string.Join()——将数组按照指定的字符串连接,返回一个字符串。

字节数组---字符串

Encoding.Default.GetString(字节数组)

字符串--->字节数组

Encoding.Default.GetBytes(字符串)

ArrayList

类似于数组,为可变长度的存储空间,可以存放任意类型的数据

用法:

ArrayList list = new ArrayList();

list.Count //长度

list.Add(数据);//添加数据

list.AddRange(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 });//把1,2...数据依次添加

list.AddRange(list);//把list里面的数据依次添加

list.Clear();//清空所有元素

list.Remove(数据);//删除单个元素 写谁就删谁

list.RemoveAt(索引);//根据下标去删除元素

list.RemoveRange(index, count);//根据下标去移除一定范围的元素

list.Sort();//升序排列

list.Reverse();//反转

list.Insert(index, "插入的");//在指定的位置插入一个元素

list.InsertRange(0, new string[] { "张三", "李四" });//在指定的位置插入一个集合

list.Contains(元素);//判断是否包含某个指定的元素

装箱、拆箱的概念

装箱:就是将值类型转换为引用类型。

拆箱:将引用类型转换为值类型。

看两种类型是否发生了装箱或者拆箱,要看,这两种类型是否存在继承关系

注意:使用泛型集合而不使用ArrayList集合的目的是防止拆装箱。

Path类的用法

获得文件名:Path.GetFileName(str);获得文件名但是不包含扩展名:Path.GetFileNameWithoutExtension(str);获得文件的扩展名:Path.GetExtension(str);获得文件所在的文件夹的名称:Path.GetDirectoryName(str);获得文件所在的全路径:Path.GetFullPath(str);连接两个字符串作为路径:Path.Combine(@"c:\a" , "b.txt");

File类的用法

创建一个文件:File.Create(@"C:\Users\SpringRain\Desktop\new.txt");删除一个文件:File.Delete(@"C:\Users\SpringRain\Desktop\new.txt");

复制一个文件:File.Copy(@"C:\Users\SpringRain\Desktop\code.txt", @"C:\Users\SpringRain\Desktop\new.txt");

剪切一个文件:File.Move(@"C:\Users\SpringRain\Desktop\code.txt", @"C:\Users\SpringRain\Desktop\newnew.txt");

用File类操作文件的数据

      //将文件读取到字节数组中 
       byte[] buffer = File.ReadAllBytes(@"C:\Users\SpringRain\Desktop\1.txt");
        //将字节数组转换成字符串
        string s = Encoding.UTF8.GetString(buffer);
 
 
      //将字符串写入到指定文件中
        string s="今天天气好晴朗,处处好风光";
        //将字符串转换成字节数组
        byte[] buffer=  Encoding.Default.GetBytes(s);
        File.WriteAllBytes(@"C:\Users\SpringRain\Desktop\1.txt", buffer);
 
    //一行一行读取
        string[] contents = File.ReadAllLines(@"C:\Users\SpringRain\Desktop\抽象类特点.txt", Encoding.Default);
        foreach (string item in contents)
        {
            Console.WriteLine(item);
        }
 
    //直接读取所有
        string str = File.ReadAllText("抽象类特点.txt", Encoding.Default);
 
    //一行一行写入
        File.WriteAllLines(@"C:\Users\SpringRain\Desktop\new.txt", new string[] { "aoe", "ewu" });
 
    //a直接全部写入
        File.WriteAllText(@"C:\Users\SpringRain\Desktop\new.txt", "张三李四王五赵六");
 
    //不发生覆盖的写入  
        File.AppendAllText(@"C:\Users\SpringRain\Desktop\new.txt", "看我有木有把你覆盖掉");

List的使用

用法与ArrayList类似可以ToArray(),ToList()使泛型集合与数组相互转换

Dictionary

使用方式与HashTable类似

        Dictionary<int, string> dic = new Dictionary<int, string>();
        dic.Add(1, "张三");
        dic.Add(2, "李四");
        dic.Add(3, "王五");
        dic[1] = "新来的";
        foreach (KeyValuePair<int,string> kv in dic)
        {
            Console.WriteLine("{0}---{1}",kv.Key,kv.Value);
        }
 
        foreach (var item in dic.Keys)
        {
            Console.WriteLine("{0}---{1}",item,dic[item]);
        }

文件IO流的实例代码

        //使用FileStream来读取数据
        FileStream fsRead = new FileStream(@"C:\Users\SpringRain\Desktop\new.txt", FileMode.OpenOrCreate, FileAccess.Read);
        byte[] buffer = new byte[1024 * 1024 * 5];
        //3.8M  5M
        //返回本次实际读取到的有效字节数
        int r = fsRead.Read(buffer, 0, buffer.Length);
        //将字节数组中每一个元素按照指定的编码格式解码成字符串
        string s = Encoding.UTF8.GetString(buffer, 0, r);
        //关闭流
        fsRead.Close();
        //释放流所占用的资源
        fsRead.Dispose();
        Console.WriteLine(s);
        Console.ReadKey();
 
 
        //使用FileStream来写入数据
        //using (FileStream fsWrite = new FileStream(@"C:\Users\SpringRain\Desktop\new.txt", FileMode.OpenOrCreate, FileAccess.Write))
        //{
        //    string str = "看我游牧又把你覆盖掉";
        //    byte[] buffer = Encoding.UTF8.GetBytes(str);
        //    fsWrite.Write(buffer, 0, buffer.Length);
        //}
        //Console.WriteLine("写入OK");
        //Console.ReadKey();

IO流复制大文件的实例代码

注意:将创建文件流对象的过程写在using当中,会自动的帮助我们释放流所占用的资源。

        //1、我们创建一个负责读取的流
        using (FileStream fsRead = new FileStream(soucre, FileMode.Open, FileAccess.Read))
        {
            //2、创建一个负责写入的流
            using (FileStream fsWrite = new FileStream(target, FileMode.OpenOrCreate, FileAccess.Write))
            {
                byte[] buffer = new byte[1024 * 1024 * 5];
                //因为文件可能会比较大,所以我们在读取的时候 应该通过一个循环去读取
                while (true)
                {
                    //返回本次读取实际读取到的字节数
                    int r = fsRead.Read(buffer, 0, buffer.Length);
                    //如果返回一个0,也就意味什么都没有读取到,读取完了
                    if (r == 0)
                    {
                        break;
                    }
                    fsWrite.Write(buffer, 0, r);
                }              
            }
        }

使用IO流操作文本文件实例

        使用StreamReader来读取一个文本文件
        using (StreamReader sr = new StreamReader(@"C:\Users\SpringRain\Desktop\抽象类特点.txt",Encoding.Default))
        {
            while (!sr.EndOfStream)
            {
                Console.WriteLine(sr.ReadLine());
            }
        }
 
 
        //使用StreamWriter来写入一个文本文件
        using (StreamWriter sw = new StreamWriter(@"C:\Users\SpringRain\Desktop\newnew.txt",true))//true为不覆盖
        {
            sw.Write("看我有木有把你覆盖掉");
        }

如何遍历一个文件夹的目录

    //封装一个遍历文件夹目录大方法
    public void GetAllFiles(string path)
    {
            var dir=new DirectoryInfo(path);
            foreach(var file in dir.GetFiles())  //GetFiles()获得所有文件对象
            {
                    Console.WriteLine("文件名:{0}",file.Name);
            }
            foreach(var directory in dir.GetDirectories())  //GetDirectories获得所有文件夹对象
            {
                    Console.WriteLine("文件夹名:{0}",directory.Name);
                    this.GetAllFiles(directory.FullName);
            }
    }

移动文件夹需要如何异常处理

    public void MoveFile(string sourceFilePath,string destinationFilePath)
    {
            var temp=Path.GetTempFileName();
            File.Copy(destinationFilePath,temp);
            try
            {
                    File.Move(sourceFilePath,destinationFilePath);
            }
            catch (Exception)
            {
                    File.Copy(temp,sourceFilePath);
                    throw;
            }
    }

抽象类的介绍

1.抽象成员必须标记为abstract,并且不能有任何实现。

2.抽象成员必须在抽象类中。

3.抽象类不能被实例化

4.子类继承抽象类后,必须把父类中的所有抽象成员都重写。(除非子类也是一个抽象类,则可以不重写)

5.抽象成员的访问修饰符不能是private

6.在抽象类中可以包含实例成员。并且抽象类的实例成员可以不被子类实现

7.抽象类是有构造函数的。虽然不能被实例化。

8.如果父类的抽象方法中有参数,那么。继承这个抽象父类的子类在重写父类的方法的时候必须传入对应的参数。

如果抽象父类的抽象方法中有返回值,那么子类在重写这个抽象方法的时候 也必须要传入返回值。

注意:如果父类中的方法有默认的实现,并且父类需要被实例化,这时可以考虑将父类定义成一个普通类,用虚方法来实现多态。如果父类中的方法没有默认实现,父类也不需要被实例化,则可以将该类定义为抽象类。

实现多态的手段

虚方法:将父类的方法标记为虚方法 ,使用关键字 virtual,这个函数可以被子类重新写一个遍。

抽象类:当父类中的方法不知道如何去实现的时候,可以考虑将父类写成抽象类,将方法写成抽象方法。

c#中的访问修饰符

public :公开的公共的

private:私有的,只能在当前类的内部访问

protected:受保护的,只能在当前类的内部以及该类的子类中访问。

internal:只能在当前项目中访问。在同一个项目中,internal和public的权限是一样。protected internal:protected+internal

注意:1)、能够修饰类的访问修饰符只有两个:public、internal。

2)、子类的访问权限不能高于父类的访问权限,会暴漏父类的成员。

Directory类的使用

用于操作文件夹

创建文件夹:Directory.CreateDirectory(@"C:\a");

删除文件夹:Directory.Delete(@"C:\a",true); //true里面有内容也可以删除,否则会抛出异常

剪切文件夹:Directory.Move(@"c:\a", @"C:\Users\SpringRain\Desktop\new");

获得指定文件夹下所有文件的全路径:string[] path = Directory.GetFiles(@"C:\Users\SpringRain\Desktop\Picture","*.jpg"); //第二个参数可以过滤文件

获得指定目录下所有文件夹的全路径:string[] path = Directory.GetDirectories(@"C:\Users\SpringRain\Desktop\new");

判断指定的文件夹是否存在:Directory.Exists(@"C:\a\b");

接口的基本概念

1.只要一个类继承了一个接口(包括抽象类),这个类就必须实现这个接口中所有的成员

2.接口不能被实例化。也就是说,接口不能new(不能创建对象)。

3.接口中的成员不能加“访问修饰符”,默认就是public。

4.接口中的成员不能有任何实现(必须“光说不做”)。

5.接口中只能有方法、属性、索引器、事件,不能有“字段”和构造函数。

6.接口与接口之间可以继承,并且可以多继承。

7.接口并不能去继承一个类,而类可以继承接口(类可以继承多个接口)。

8.实现接口的子类必须实现该接口的全部成员。

注意:抽象类的方法被子类实现时必须在实现方法前+override;但是子类实现的接口的方法不用+任何修饰符

序列化与反序列化的代码示例

        将某个对象传输给对方电脑
        Person p = new Person();  //例如:人这个对象,假设这个示例类已经定义好了
        p.Name = "霍金";
        p.Age = 27;
        p.Gender = '男';
        using (FileStream fsWrite = new FileStream(@"C:\Users\SpringRain\Desktop\111.txt", FileMode.OpenOrCreate, FileAccess.Write))
        { 
            //开始序列化对象
            BinaryFormatter bf = new BinaryFormatter();
            bf.Serialize(fsWrite, p);
        }
        Console.WriteLine("序列化成功");
 
 
        //接收对方发送过来的二进制 反序列化成对象
        Person p;
        using (FileStream fsRead = new FileStream(@"C:\Users\SpringRain\Desktop\111.txt", FileMode.OpenOrCreate, FileAccess.Read))
        {
            BinaryFormatter bf = new BinaryFormatter();
            p = (Person)bf.Deserialize(fsRead);
        }

部分类概念

用partial修饰class,将两个相同类名的partial class当做一个类使用。(用于多人协作)

sealed密封类的概念

不能够被其他类继承,但是可以继承于其他类。

本文为归纳和补充重要知识点,具体更为详细内容总结可查看此链接

C#基础知识框架整理_c#框架-CSDN博客文章浏览阅读4.2k次,点赞10次,收藏46次。注意:表达式2的结果类型必须跟表达式3的结果类型一致,并且也要跟整个三元表达式的结果类型一致。结构的使用函数的调用全局静态字段方法中的高级参数用法out、ref、params什么是属性访问修饰符静态和非静态的区别静态类的使用new关键字的作用3.调用对象的构造函数进行初始化对象属性的概念及作用英文对照静态和非静态的区别析构函数构造函数的概念this关键字的用法_c#框架https://blog.csdn.net/i78i845/article/details/128184420?ops_request_misc=&request_id=&biz_id=102&utm_term=C&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-5-128184420.142

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1988060.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习c语言第二十二天(c语言文件操作)

1. 为什么使用文件&#xff1f; 我们前面学习结构体时&#xff0c;写了通讯录的程序&#xff0c;当通讯录运行起来的时候&#xff0c;可以给通讯录中增加、删除数据&#xff0c;此时数据是存放在内存中&#xff0c;当程序退出的时候&#xff0c;通讯录中的数据自然就不存在了&…

工地人员定位系统的功能和作用

工地人员定位系统是一种基于实时定位技术的管理系统&#xff0c;旨在为施工单位提供安全、高效的管理服务。该系统可以对工人进行实时监控与管理&#xff0c;极大地提高了工地施工安全性和工作效率&#xff0c;降低了工伤事故频率。通过使用该系统&#xff0c;施工单位能够实时…

解决mqtt在线或离线监听问题的多种方法

目录 前言 优缺点&#xff1a; 1.创建 DeviceMqttCallBacked类&#xff0c;实现 MqttCallbackExtended 接口&#xff0c;添加带cleintId参数的构造方法。 2. 在Mqtt连接成功之后&#xff0c;设置回调类。 3.执行上述代码&#xff0c;查看emqx界面 4.从emqx上踢除设备 5…

html+css 实现hover酷炫发光按钮

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽效果&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 文…

“5G+Windows”推动全场景数字化升级:美格智能5G智能模组SRM930成功运行Windows 11系统

操作系统作为连接用户与数字世界的桥梁&#xff0c;在数字化迅速发展的时代扮演着至关重要的角色&#xff0c;智能设备与操作系统的协同工作&#xff0c;成为推动现代生活和商业效率的关键力量。其中&#xff0c;Windows系统以其广泛的应用基础和强大的兼容性成为全球最广泛使用…

服务器启动jar包的时候报”no main manifest attribute“异常(快捷解决)

所以,哥们,又出现问题咯.没事,我也出现了,哈哈哈哈哈,csdn感觉太麻烦了,所以搞了一篇这个. 没得事,往下看,包解决的. 希望可以帮助到各位&#xff0c;感谢阅览&#xff01; 小手点个赞&#xff0c;作者会乐烂哈哈哈哈哈哈&#x1f606;&#x1f606;&#x1f606;&#x1f606…

Linux中多线程压缩软件 | Mingz

原文链接&#xff1a;Linux中多线程压缩软件 本期教程 软件网址&#xff1a; https://github.com/hewm2008/MingZ安装&#xff1a; git clone https://github.com/hewm2008/MingZ.git cd MingZ make cd bin ./mingz -h使用源码安装&#xff1a; 若是你的git无法使用安装&am…

【IEEE出版 | 高校主办】第三届人工智能、物联网和云计算技术国际会议(AIoTC 2024)

第三届人工智能、物联网和云计算技术国际会议&#xff08;AIoTC 2024&#xff09; 2024 3rd International Conference on Artificial Intelligence, Internet of Things and Cloud Computing Technology 2024年9月13-15日 | 中国武汉 重要信息 大会官网&#xff1a;www.ic…

Jboss 漏洞

一.CVE-2015-7501 访问/invoker/JMXInvokerServlet 开启下载存在漏洞 二.CVE-2017-7504 三CVE-2017-12149 启动vulhub环境&#xff0c;访问/invoker/readonly出现如下界面&#xff0c;说明存在漏洞 使用工具连接 四.Administration Console弱⼝令 访问/admin-console/login…

高职物联网智慧农业实训室建设方案

一、项目概述 随着物联网技术的迅猛发展及其在农业领域的广泛应用&#xff0c;智慧农业已经成为推动农业现代化的关键力量。近年来&#xff0c;国家高度重视物联网技术在农业领域的应用与发展&#xff0c;出台了一系列相关政策支持智慧农业建设。如《数字乡村发展战略纲要》明…

Dubbo框架实现RPC远程调用

项目背景介绍 这个技术我是直接在项目中运用并且学习的&#xff0c;所以我写笔记最优先的角度就是从项目背景出发 继上一次API网关完成了这个实现用户调用一次接口之后让接口次数增多的操作之后&#xff0c;又迎来了新的问题。 就是我们在调用接口的时候需要对用户进行校验&…

苍穹外卖day12(day15)---数据统计——Excel报表(项目完结)

工作台 接口设计 新建admin/WorkSpaceController /*** 工作台*/ RestController RequestMapping("/admin/workspace") Slf4j Api(tags "工作台相关接口") public class WorkSpaceController {Autowiredprivate WorkspaceService workspaceService;/*** 工…

★WIN10计算器程序员版的使用说明(详细)

主界面 拉动边框的角&#xff1a; 1.进制转换 HEX(hexadecimal)&#xff1a;显示十六进制&#xff0c;DEC(decimal)&#xff1a;显示十进制&#xff0c;OCT(octonary)&#xff1a;显示八进制&#xff0c;BIN(binary):显示二进制 例如&#xff1a; 选中HEX 0~9&#xff0c;A…

Genymotion adb shell

Genymotion 账户是 qq邮箱 参考 Ubuntu 20.04 安装 Android 模拟器 Genymotion https://www.zzzmh.cn/post/553cd96d4e47490a90b3302a76a93c0d Genymotion adb shell adb shell C:\Program Files\Genymobile\Genymotion\tools>adb shell lsusb Bus 001 Device 001: ID …

【Bug分析】Keil报错:error: #18:expected a “)“问题解决

【Bug分析】Keil报错&#xff1a;error: #18:expected a “&#xff09;”问题解决 前言bug查找bug解决方法小结 前言 keil编译时出现一个问题&#xff0c;缺少一个右括号。然后仔细查看代码&#xff0c;并没有括号缺失。 如下&#xff0c;代码括号正常。 bug查找 站内文章…

多机部署, 负载均衡-LoadBalance

目录 1.负载均衡介绍 1.1问题描述 1.2什么是负载均衡 1.3负载均衡的一些实现 服务端负载均衡 客户端负载均衡 2.Spring Cloud LoadBalancer 2.1快速上手实现负载均衡 2.2负载均衡策略 自定义负载均衡策略 3.服务部署&#xff08;Linux&#xff09; 3.1服务构建打包…

企业发展与智能化改造:从传统到现代的转型之路

引言 在当今全球化和数字化快速发展的背景下&#xff0c;企业面临着前所未有的竞争压力和市场变化。传统的商业模式已难以满足不断变化的市场需求和客户期望&#xff0c;迫使企业探索新的增长路径和创新方式。在这种情况下&#xff0c;智能化改造成为了企业发展的关键战略之一。…

springboot“云茶”新零售系统-计算机毕业设计源码25947

摘 要 科技的发展、企业的改革和管理技术的提高&#xff0c;中国很多中小型企业面临库存管理的时效性、准确性等难题。以前在网站上&#xff0c;企业的信誉难以认证、网络法律法规不健全、物流不发达等一系列的原因&#xff0c;限制了网上交易发展的步伐&#xff0c;进入21世纪…

【OpenCV C++20 学习笔记】拉普拉斯(Laplace)二阶求导-边缘检测

拉普拉斯二阶求导 原理拉普拉斯算子(Laplacian Operator) API实例 原理 在OpenCV中&#xff0c;Sobel算法可以对图片中的值求一阶导数&#xff0c;从而计算出图片中的边缘线。其原理如下面的示意图&#xff1a; 那么&#xff0c;如果再求一次导数的&#xff0c;即求二阶导数&…

软信天成:国内企业需要什么样的国产主数据管理平台?(一)

主数据管理作为政企数据治理的基石&#xff0c;承担着维护、治理关键业务实体信息&#xff08;客户、产品、供应商、员工等核心数据&#xff09;的重任&#xff0c;确保其在整个组织内的一致性、完整性和准确性。 在当下的环境中&#xff0c;企业正面临诸多考验&#xff1a;一…