.NET深入学习笔记(4):深拷贝与浅拷贝(Deep Copy and Shallow Copy)

今天继续利用准备WSE安全开发文章的空闲时间,完善《.NET深入学习笔记》系列(基本都是.Net重要的知识点,我都做了详细的总结,是什么、为什么、和怎么实现)。想必很多人也接触过这两个概念。做过C++的人对深浅拷贝的概念一定不会陌生。而其很多C#高级软件工程师的面试里也会问到深浅拷贝相关的问题。我今天就在总结一下,并且添加了详细的代码实现,与大家分享。一起学习一下C#的深拷贝与浅拷贝(Deep Copy and Shallow Copy)的机制。全文还是分四部分:1.基本概念  2.深拷贝与浅拷贝实现机制 3.代码实现和分析 4.总结。下面我们来进入正式的学习。
1.基本概念:
首先我们应该了解一下什么叫深拷贝与浅拷贝(Deep Copy and Shallow Copy)。
a.浅拷贝(Shallow Copy影子克隆):只复制对象的基本类型,对象类型,仍属于原来的引用。
      b.深拷贝(Deep Copy 深度克隆):不紧复制对象的基本类,同时也复制原对象中的对象.完全产生新对象。
我们知道,在C++中有拷贝构造函数和拷贝赋值函数的概念。浅拷贝就是成员数据之间的一一赋值:把值赋给一一赋给要拷贝的值。但是可能会有这样的情况:对象还包含资源,这里的资源可以指堆资源,或者一个文件。当值拷贝的时候,两个对象就有用共同的资源,同时对资源可以访问,这样就会出问题。深拷贝就是用来解决这样的问题的,它把资源也赋值一次,使对象拥有不同的资源,但资源的内容是一样的。对于堆资源来说,就是在开辟一片堆内存,把原来的内容拷贝。  

    如果你拷贝的对象中引用了某个外部的内容(比如分配在堆上的数据),那么在拷贝这个对象的时候,让新旧两个对象指向同一个外部的内容,就是浅拷贝;如果在拷贝这个对象的时候为新对象制作了外部对象的独立拷贝,就是深拷贝  
   这个C#里的概念与C++类似。我们可以参考以前的概念理解。 深拷贝与浅拷贝之间的区别基本可以从定义看出。首先浅拷贝是指将对象中的数值类型的字段拷贝到新的对象中,而对象中的引用型字段则指复制它的一个引用到目标对象。如果改变目标对象中引用型字段的值他将反映在原是对象中,也就是说原始对象中对应的字段也会发生变化。
深拷贝拷贝不同的是对于引用拷贝的处理,深拷贝将会在新对象中创建和原是对象中对应值类型的字段并且赋值。浅拷贝不会创建新引用类型,会返回相同的类型引用。深拷贝会重新创建新对象,返回新对象的引用字。C#中的观察者模式就是浅拷贝的例子。我们保留的只是对象的副本。
  2.深拷贝与浅拷贝实现机制:
从上面的概念我们了解了C#深拷贝与浅拷贝(Deep Copy and Shallow Copy)的不同之处。这个也就决定了两者有不同的实现方式。
对于值类型:
    a.浅拷贝: 通过赋值等操作直接实现,将对象中的值类型的字段拷贝到新的对象中。      
    b.深拷贝:通过赋值等操作直接实现,将对象中的值类型的字段拷贝到新的对象中。   和浅拷贝相同
对于引用类型:
    a.浅拷贝: MemberwiseClone 方法创建一个浅副本,方法是创建一个新对象,如果字段是值类型的,则对该字段执行逐位复制。如果字段是引用类型,则复制引用原始对象,与原对象引用同一对象。
b.深拷贝:拷贝对象应用,也拷贝对象实际内容,也就是创建了一个新的改变新对象 不会影响到原始对象的内容  
这种情况需要为其实现ICloneable接口中提供的Clone方法。
差别就是在对于引用类型的实现深拷贝和浅拷贝的时候的机制不同,前者是MemberwiseClone 方法实现,后者是通过继承实现ICloneable接口中提供的Clone方法,实现对象的深拷贝。
3.代码实现和分析:
下面我们来看看具体的代码实现部分,首先介绍的还是值类型的。
a.值类型浅拷贝的实现。代码如下:
/// <summary> 
InBlock.gif                ///    数组的=赋值(直接拷贝),也就是引用传递,指向的是同一个地址: 
InBlock.gif                /// </summary> 
InBlock.gif                public void MethodShallowCopyDirectly() 
InBlock.gif                { 
InBlock.gif                        int[] ArrayInt = { 0, 1, 2, 3 }; 
InBlock.gif 
InBlock.gif                        //所以改变其中任意一个变量的值,另一个也会被改变 
InBlock.gif                        int[] NewArrayInt = ArrayInt; 
InBlock.gif                        //改变新的数组变量: 
InBlock.gif                        NewArrayInt[0] = 8; 
InBlock.gif                        Console.WriteLine("数组的复制(直接拷贝),改变新数组第一值为8,原值{0},新值{1}", ArrayInt[0], NewArrayInt[0]); 
InBlock.gif                } 
InBlock.gif                /// <summary> 
InBlock.gif                /// ArrayInt.CopyTo,创建以个新数组,不影响原来的值 
InBlock.gif                /// </summary> 
InBlock.gif                public void MethodShallowCopyArrayCopyTo() 
InBlock.gif                { 
InBlock.gif                        int[] ArrayInt = { 0, 1, 2, 3 };            
InBlock.gif 
InBlock.gif                        //CopyTo()方法 
InBlock.gif                        int[] NewArrayInt = new int[5];//创建以个新数组,按值拷贝,不影响原来的值 
InBlock.gif                        ArrayInt.CopyTo(NewArrayInt, 0); 
InBlock.gif                        NewArrayInt[0] = 8; 
InBlock.gif                        Console.WriteLine("Array.CopyTo,改变新数组第一值为8,原值{0},新值{1}", ArrayInt[0], NewArrayInt[0]); 
InBlock.gif                 
InBlock.gif                } 
InBlock.gif                /// <summary> 
InBlock.gif                /// Array.Copy浅拷贝,值类型的浅拷贝,创建以个新数组,按值拷贝,不影响原来的值 
InBlock.gif                /// </summary> 
InBlock.gif                public void MethodShallowCopyArrayCopy() 
InBlock.gif                { 
InBlock.gif                        int[] ArrayInt = { 0, 1, 2, 3 }; 
InBlock.gif                        //Copy()方法 
InBlock.gif                        int[] NewArrayInt = new int[4]; 
InBlock.gif                        Array.Copy(ArrayInt, NewArrayInt, 0);//创建以个新数组,按值拷贝,不影响原来的值 
InBlock.gif                        NewArrayInt[0] = 8; 
InBlock.gif                        Console.WriteLine("Array.Copy,改变新数组第一值为8,原值{0},新值{1}", ArrayInt[0], NewArrayInt[0]); 
InBlock.gif 
InBlock.gif                } 
InBlock.gif                /// <summary> 
InBlock.gif                /// Array.Clone(),浅拷贝 
InBlock.gif                /// </summary> 
InBlock.gif                public void MethodShallowCopyArrayClone() 
InBlock.gif                { 
InBlock.gif                        int[] ArrayInt = { 0, 1, 2, 3 }; 
InBlock.gif                        //Array Clone()方法 
InBlock.gif                        int[] NewArrayInt = ArrayInt.Clone() as int[];//按值拷贝,不影响原来的值 
InBlock.gif                        NewArrayInt[0] = 8; 
InBlock.gif                        Console.WriteLine("Array.Clone(),改变新数组第一值为8,原值{0},新值{1}", ArrayInt[0], NewArrayInt[0]); 
InBlock.gif                } 
InBlock.gif                /// <summary> 
InBlock.gif                /// .浅拷贝:(引用类型),数组中的元素是引用类型,复制的是它的一个引用,改变新拷贝会改变原对象 
InBlock.gif                /// </summary> 
InBlock.gif                public void MethodShallowCopyStringArrayCopyTo() 
InBlock.gif                { 
InBlock.gif                        string[] sArray ={ "string0""string1""string2" }; 
InBlock.gif                        string[] sNewArray = sArray; 
InBlock.gif                        //浅拷贝一个新对象 
InBlock.gif                        sArray.CopyTo(sNewArray, 0); 
InBlock.gif 
InBlock.gif                        //改变新对象的值这个时候源对象中的值也会被改变 
InBlock.gif                        sNewArray[0] = "FrankXuLei"
InBlock.gif                        Console.WriteLine("数组的浅拷贝:(引用类型),改变第一值为FrankXuLei,原值{0},新值{1}", sArray[0], sNewArray[0]); 
InBlock.gif                } 
InBlock.gif                /// <summary> 
InBlock.gif                ///    //字符串数组的深拷贝,如果需要包含引用类型的数组的深副本,就必须迭代数组,创建新对象 
InBlock.gif                /// </summary> 
InBlock.gif                public void MethodDeepCopyStringArray() 
InBlock.gif                { 
InBlock.gif                        string[] sArray = new string[] { "string0""string1""string2""string3" }; 
InBlock.gif                        string[] sNewArray = new string[4];//迭代数组,创建新对象 
InBlock.gif                        for (int i = 0; i < sArray.Length; i++) 
InBlock.gif                        { 
InBlock.gif                                string sTemp = string.Empty; 
InBlock.gif                                sTemp = sArray[i]; 
InBlock.gif                                sNewArray[i] = sTemp; 
InBlock.gif                        } 
InBlock.gif                        sNewArray[0] = "FrankXuLei"
InBlock.gif                        Console.WriteLine("数组的复制(直接拷贝),改变新数组第一值为FrankXuLei,原值{0},新值{1}", sArray[0], sNewArray[0]); 
InBlock.gif                } 
数组的=赋值(直接拷贝),也就是引用传递,指向的是同一个地址,所以改变其中任意一个变量的值,另一个也会被改变。ArrayInt.CopyTo,创建以个新数组,改变新的数组变量不影响原来的值。Array.Copy浅拷贝,值类型的浅拷贝,创建以个新数组,按值拷贝,不影响原来的值。 .浅拷贝:(引用类型),数组中的元素是引用类型,复制的是它的一个引用,改变新拷贝会改变原对象.
b.引用类型的深拷贝实现:
定义了以个汽车类,继承接口继承接口ICloneable。
InBlock.gifpublic class CarDeepClone : ICloneable 
InBlock.gif        { 
InBlock.gif                //名称,引用类型 
InBlock.gif                public string _name = string.Empty; 
InBlock.gif                //价格,值得类型 
InBlock.gif                public int _price = 0; 
InBlock.gif                //构造函数 
InBlock.gif                public CarDeepClone() 
InBlock.gif                { 
InBlock.gif                } 
InBlock.gif                //重载构造函数 
InBlock.gif                public    CarDeepClone(string name, int price) 
InBlock.gif                { 
InBlock.gif                        _name = name; 
InBlock.gif                        _price = price; 
InBlock.gif                } 
InBlock.gif                //深拷贝,需要重新生成对象,返回的新对象的实例 
InBlock.gif                public object Clone() 
InBlock.gif                { 
InBlock.gif 
InBlock.gif                        //深复制     
InBlock.gif                        CarDeepClone obj = new CarDeepClone();//重新创建 CarDeepClone的对象 
InBlock.gif                        //obj.Member=     (ClassA)Member.Clone();     
InBlock.gif                        return obj; 
InBlock.gif                } 
InBlock.gif        } 
c.引用类型的浅拷贝实现:
浅拷贝实现的方法是this.MemberwiseClone();创建当前对象的浅副本 ,返回相同的对象引用。而深拷贝的实现代码是通过 CarDeepClone obj = new CarDeepClone();重新创建 CarDeepClone的对象。这个是两者在实现上不同的地方。
InBlock.gifpublic class CarShallowClone : ICloneable 
InBlock.gif        { 
InBlock.gif                //名称,引用类型 
InBlock.gif                public string _name = string.Empty; 
InBlock.gif                //价格,值得类型 
InBlock.gif                public int _price = 0; 
InBlock.gif                //构造函数 
InBlock.gif                public    CarShallowClone(string name, int price) 
InBlock.gif                { 
InBlock.gif                        _name = name; 
InBlock.gif                        _price = price; 
InBlock.gif                } 
InBlock.gif                //浅拷贝,MemberwiseClone方式返回对象的浅副本 
InBlock.gif                public object Clone() 
InBlock.gif                { 
InBlock.gif                        return this.MemberwiseClone();//创建当前对象的浅副本 ,返回相同的对象引用 
InBlock.gif                } 
InBlock.gif        }
d.客户端测试代码实现:
包括值类型的浅拷贝和string类型数组的深拷贝的实现测试。以及对象的深拷贝和浅拷贝的测试。具体代码如下:
InBlock.gifValueTypeCopy _ShallowCopy = new ValueTypeCopy(); 
InBlock.gif                        Console.WriteLine("Value Type Shallow Copy Demo 值类型浅拷贝。。。。。。。。。。。。。。。。。。"); 
InBlock.gif                        _ShallowCopy.MethodShallowCopyDirectly();//直接赋值 
InBlock.gif                        _ShallowCopy.MethodShallowCopyArrayClone();//调用数组的Clone()方法,浅副本 
InBlock.gif                        _ShallowCopy.MethodShallowCopyArrayCopy();//ArrayCopy方法 
InBlock.gif                        _ShallowCopy.MethodShallowCopyArrayCopyTo();//ArrayCopyTo()方法 
InBlock.gif                        _ShallowCopy.MethodShallowCopyStringArrayCopyTo();//ArrayCopyTo()方法 
InBlock.gif    
InBlock.gif                        _ShallowCopy.MethodDeepCopyStringArray();//深拷贝字符数组 
InBlock.gif 
InBlock.gif    
InBlock.gif 
InBlock.gif                        //DeepCopy Test深拷贝,重新生成对象,对新对象的修改不会改变原来对象的值 
InBlock.gif                        Console.WriteLine("Object Deep        Copy Demo    对象深拷贝。。。。。。。。。。。。。。。。。。。。。"); 
InBlock.gif                        CarDeepClone _CarDeepClone1 = new CarDeepClone("Benz700",700); 
InBlock.gif                        //深拷贝 
InBlock.gif                        Console.WriteLine("DeepCopy Test深拷贝,原对象名字{0}", _CarDeepClone1._name); 
InBlock.gif                        CarDeepClone _CarDeepClone2 = _CarDeepClone1.Clone() as CarDeepClone; 
InBlock.gif 
InBlock.gif                        Console.WriteLine("DeepCopy Test深拷贝,新对象名字{0}", _CarDeepClone2._name); 
InBlock.gif                        //修改新对象的名字 
InBlock.gif                        _CarDeepClone2._name = "Benz800"
InBlock.gif                        Console.WriteLine("DeepCopy Test深拷贝,新对象名字修改为{0}", _CarDeepClone2._name); 
InBlock.gif                        //输出对象信息 
InBlock.gif                        Console.WriteLine("DeepCopy Test深拷贝,原对象名字为{0},新对象名字为{1}", _CarDeepClone1._name, _CarDeepClone2._name); 
InBlock.gif 
InBlock.gif                        //ShallowCopy Test浅拷贝,新对象的修改会改变原来对象的值得 
InBlock.gif                        Console.WriteLine("Object Shallow Copy Demo    对象浅拷贝。。。。。。。。。。。。。。。。。。。。。"); 
InBlock.gif                        CarShallowClone _CarShallowClone1 = new CarShallowClone("BMW3", 300); 
InBlock.gif                        Console.WriteLine("ShallowCopy Test浅拷贝,原对象名字{0}", _CarShallowClone1._name); 
InBlock.gif                        //浅拷贝对象 
InBlock.gif                        CarShallowClone _CarShallowClone2 = _CarShallowClone1.Clone() as CarShallowClone; 
InBlock.gif                        Console.WriteLine("ShallowCopy Test浅拷贝,新对象名字{0}", _CarShallowClone2._name); 
InBlock.gif                        //修改新对象名字 
InBlock.gif                        _CarShallowClone2._name = "BMW7"
InBlock.gif                        Console.WriteLine("ShallowCopy Test浅拷贝,新对象名字修改为{0}", _CarShallowClone2._name); 
InBlock.gif                        //输出对象信息 
InBlock.gif                        Console.WriteLine("ShallowCopy Test浅拷贝,原对象名字{0},新对象名字{1}", _CarShallowClone1._name, _CarShallowClone2._name); 
首先测试的值类型的不同的浅拷贝方法,实例化类ValueTypeCopy _ShallowCopy = new ValueTypeCopy();
    进行 值类型浅拷测试贝。分别包括:   _ShallowCopy.MethodShallowCopyDirectly();直接赋值拷贝,
            _ShallowCopy.MethodShallowCopyArrayClone();调用数组的Clone()方法,浅副本
            _ShallowCopy.MethodShallowCopyArrayCopy();ArrayCopy方法
            _ShallowCopy.MethodShallowCopyArrayCopyTo();ArrayCopyTo()方法
            _ShallowCopy.MethodShallowCopyStringArrayCopyTo();ArrayCopyTo()方法
             _ShallowCopy.MethodDeepCopyStringArray();深拷贝字符数组后面代码主要是对对象深浅拷贝的不同测试。
运行结果如下图:
4.总结
通过以上内容的学习,希望大家对C#中的深拷贝与浅拷贝(Deep Copy and Shallow Copy)的机制能有更深入的了解。我在总结这个文章的时候也查阅了MSDN及C#书籍等资料。与大家一起分享。有问题的也可以留言一起交流~共同学习进步~(最后附上本次实现的代码。下载地址
/Files/frank_xl/CloneDemoFrankXuLei.zip 。前几天忙硕士论文的事情,没时间更新blog,现在抓紧时间继续准备WSE3.0安全开发的文章,应该最近会写出来。主要是涉及到的知识点很多,需要时间学习,而且开发环境配置比较复杂。代码插入出了问题,有js错误,请大家下载代码)



本文转自 frankxulei 51CTO博客,原文链接:http://blog.51cto.com/frankxulei/318538,如需转载请自行联系原作者


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

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

相关文章

VIM一般模式操作

2019独角兽企业重金招聘Python工程师标准>>> vim介绍 vim和vi几乎是一样的&#xff0c;唯一的区别就是当编辑一个文本时&#xff0c;使用vi不会显示颜色&#xff0c;而使用vim会显示颜色。 vim有三个模式&#xff1a;一般模式&#xff0c;编辑模式&#xff0c;命令模…

[转载] 解析Java的JNI编程中的对象引用与内存泄漏问题

参考链接&#xff1a; Java对象如何存储在内存中 JNI&#xff0c;Java Native Interface&#xff0c;是 native code 的编程接口。JNI 使 Java 代码程序可以与 native code 交互——在 Java 程序中调用 native code&#xff1b;在 native code 中嵌入 Java 虚拟机调用 Java 的…

[转载] java中创建对象的方式

参考链接&#xff1a; 用Java创建对象的不同方法 java中的4种创建对象的方式&#xff1a; 在这片博文中和大家简单分享一下常见的几种创建java对象的方式 1.使用 new 的方式&#xff0c;这也是我们最常见的一种方式 我们以 Person 类来举例说明 例&#xff1a; Person p…

Exchange 2007 SP1 如何定时清理日志???

Exchange 2007 SP1 如何定时清理日志&#xff1f;&#xff1f;&#xff1f; 时间:2011-12-31 11:00Tag标签&#xff1a;来源:未知 作者:达思科技 点击: 93次此文章出自&#xff1a; 专业数据恢复 问&#xff1a;Exchange 2007 SP1 如何定时清理日志&#xff1f;&#xff1f;&am…

[转载] java-继承和多态

参考链接&#xff1a; Java中的继承 继承&#xff1a; 继承就是保持已有类的特性而构造新类的过程。继承后&#xff0c;子类能够利用父类中定义的变量和方法&#xff0c;就像它们属于子类本身一样。 单继承&#xff1a;在类层次中&#xff0c;子类只继承一个父类的数据结构…

走进SQL Server 2005:备份与恢复功能

每当有任何新的软件发布的时候&#xff0c;你通常都会发现一些你从来不知道或者从来不知道你需要的新的特性。SQL Server 2000中存在的许多的备份和恢复特性都同样保留在了SQL Server 2005中&#xff0c;但是有一些新的提高同样值得你的关注。 镜像备份 SQL Server 2005让你可以…

[转载] Java对返回值的封装

参考链接&#xff1a; 用Java封装 定义自己所需要的返回值类型 public class CodeMsg implements Cloneable { private int retCode; private String message; // 通用异常 public static CodeMsg SUCCESS new CodeMsg(0, "success"); public static CodeMsg EMP…

stateful set 学习笔记

2019独角兽企业重金招聘Python工程师标准>>> 1、创建pv # cat pv.yaml kind: PersistentVolume apiVersion: v1 metadata:name: task-pv-volumelabels:type: local spec:capacity:storage: 3GiaccessModes:- ReadWriteOncehostPath:path: "/tmp/data" 2、…

[转载] Java中对象数组的使用

参考链接&#xff1a; 如何在Java中交换或交换对象 Java对象数组使用 一、Java数组的使用二、Java的对象数组2.1 问题提出2.2 问题解析2.3 问题拆分2.4 代码实现 一、Java数组的使用 对象数组其实和Java的数组类似的&#xff0c;所以要很清楚Java的数组是如何使用的&#xf…

Python自动化开发学习13-联合唯一

联合唯一 联合唯一&#xff0c;就是一个表中的多个字段的组合需要唯一。 使用mysql语句创建 比如创建一张hosts表&#xff0c;记录登录的ip地址或者hostname&#xff08;表中对应字段host&#xff09;和 端口号&#xff08;表中对应字段port&#xff09;&#xff0c;要求host 和…

[转载] Java获取泛型T的类型 T.class

参考链接&#xff1a; Java中的抽象 import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; public class Main{ public static void main(String[] args) { Foo<String> foo new Foo<String>(){}; // 在类的外部这样获取 Type type ((…

自定义控件---重写Listbox实现item图标变换和item点击事件

博客开通有一阵了&#xff0c;就是没有时间写&#xff0c;遗憾啊。&#xff01; 这几天做了个排序的自定义控件&#xff0c;在listbox item里放是button 并支持图标的交替变换 效果如下&#xff1a; 把代码贴上&#xff1a;1using System; 2using System.Collections.…

[转载] Spring面试题整理

参考链接&#xff1a; Java中的动态方法Dispatch和运行时多态 Spring面试题整理 2018年03月07日 21:11:46 hrbeuwhw 阅读数&#xff1a;49116 Spring 概述 1. 什么是spring? spring 是个Java企业级应用的开源开发框架。Spring主要用来开发Java应用&#xff0c;但是有…

ansible: Linux批量管理神器

我们已经知道&#xff0c;基于集群可实现服务器横向扩展slace out。可是&#xff0c;当上百台主机集合成共同为一个站点提供web页面访问的形式时&#xff0c;怎么管理整个集群体呢&#xff1f; 一些小伙伴大概听说过pxe等可实现自动安装系统。可是&#xff0c;要我们一台一台主…

[转载] Python numpy函数:all()和any()比较矩阵

参考链接&#xff1a; Python中的any和all 数组元素的比对&#xff0c;我们可以直接使用“”进行比较&#xff0c;比如&#xff1a; 但是当数组元素较多时&#xff0c;查看输出结果便变得很麻烦&#xff0c;这时我们可以使用all&#xff08;&#xff09;方法&#xff0c;直接…

MySQL初识-架构-安装-初始化-连接-管理工具-数据文件

MySQL架构和结构分析 官方架构图 内部组件结构图 MySQL安装方式 MySQL初始化 MySQL工作模式及常用命令 交互式模式&#xff1a;mysql> 1234567891011121314# 交互式模式下的客户端命令mysql> help # 获取命令帮助 mysql> \? # 同上 mysql> \c # 取消命令执行 mysq…

[转载] Java基础——关联、聚合、组合

参考链接&#xff1a; Java中的关联 | 组合和聚合 一.引言 其实自己也不知道&#xff0c;在需求设计、架构设计、开发阶段是否真正需要弄明白“关联、聚合、组合”。原本计划这篇博文写“继承“和”多态”&#xff0c;但是一翻阅资料&#xff0c;基本上都会把“继承”和“组…

[转载] WSDL2Java详细使用说明【官方最全说明】

参考链接&#xff1a; Java中的this说明 WSDL to Java 命名 wsdl2java - 获取WSDL文档并生成完全带注释的Java代码&#xff0c;并实现相关服务。 概要 用例 : wsdl2java -fe|-frontend <front-end-name> -db|-databinding <data-binding-name> -wv <…

mdm.Dialogs.promptModal()使用

这是prompt的扩展&#xff0c;提供了更多的功能&#xff0c;比如可以添加其他按钮和图标import mdm.*;mdm.Application.init(this, onInit);function onInit():void {// 启动程序...}quit.addEventListener(MouseEvent.CLICK,quitProgram);function quitProgram(evt:MouseEvent…

[转载] JAVA 构造函数及其重载

参考链接&#xff1a; Java重载Overload public class Student{ public int stuId; public String stuName; public int stuAge; public int stuScore; public Student(){ } public Student(int sId,String sName){ stuId sId; sName stuName; } public Student(int sld,S…