类和结构
来源:互联网 发布:tcp端口阻塞 编辑:程序博客网 时间:2024/05/22 03:11
类和结构是 .NET Framework 中的常规类型系统的两种基本构造。 两者在本质上都属于数据结构,封装着一组整体作为一个逻辑单位的数据和行为。 数据和行为是该类或结构的“成员”,它们包含各自的方法、属性和事件等
类是一种“引用类型”
创建类的对象时,对象赋值到的变量只保存对该内存的引用。将对象引用赋给新变量时,新变量引用的是原始对象。通过一个变量做出的更改将反映在另一个变量中,因为两者引用同一数据。
由于类是引用类型,因此类对象的变量引用该对象在托管堆上的地址。如果将同一类型的第二个对象分配给第一个对象,则两个变量都引用该地址的对象。
public class Person{ public string Name { get; set; } public int Age { get; set; } public Person(string name, int age) { Name = name; Age = age; } //Other properties, methods, events...}class Program{ static void Main() { Person person1 = new Person("Leopold", 6); Console.WriteLine("person1 Name = {0} Age = {1}", person1.Name, person1.Age); // Declare new person, assign person1 to it. Person person2 = person1; //Change the name of person2, and person1 also changes. person2.Name = "Molly"; person2.Age = 16; Console.WriteLine("person2 Name = {0} Age = {1}", person2.Name, person2.Age); Console.WriteLine("person1 Name = {0} Age = {1}", person1.Name, person1.Age); // Keep the console open in debug mode. Console.WriteLine("Press any key to exit."); Console.ReadKey(); }}/* Output: person1 Name = Leopold Age = 6 person2 Name = Molly Age = 16 person1 Name = Molly Age = 16*/
结构是一种“值类型”
创建结构时,结构赋值到的变量保存该结构的实际数据。将结构赋给新变量时,将复制该结构。 因此,新变量和原始变量包含同一数据的两个不同的副本。 对一个副本的更改不影响另一个副本。
由于结构是值类型,因此结构对象的变量具有整个对象的副本。结构的实例也可以使用 new 运算符来创建,但这不是必需的,如下面的示例所示
public struct Person{ public string Name; public int Age; public Person(string name, int age) { Name = name; Age = age; }}public class Application{ static void Main() { // Create struct instance and initialize by using "new". // Memory is allocated on thread stack. Person p1 = new Person("Alex", 9); Console.WriteLine("p1 Name = {0} Age = {1}", p1.Name, p1.Age); // Create new struct object. Note that struct can be initialized // without using "new". Person p2 = p1; // Assign values to p2 members. p2.Name = "Spencer"; p2.Age = 7; Console.WriteLine("p2 Name = {0} Age = {1}", p2.Name, p2.Age); // p1 values remain unchanged because p2 is copy. Console.WriteLine("p1 Name = {0} Age = {1}", p1.Name, p1.Age); // Keep the console open in debug mode. Console.WriteLine("Press any key to exit."); Console.ReadKey(); }}/* Output: p1 Name = Alex Age = 9 p2 Name = Spencer Age = 7 p1 Name = Alex Age = 9*/
- 结构和类
- 类和结构
- 结构和类
- 对象、类和结构
- C#结构和类
- 结构和类区别
- .net 类和结构
- 关于结构和类
- C++结构和类
- C++结构和类
- 类和结构
- 类和结构
- (16) 结构和类
- c++ 结构和类
- 结构体和类
- 结构体和类
- 类和结构之一
- 结构体和类
- Criteria和DetachedCriteria的区别(转)
- resteasy入门
- Rose与PowerDesigner:两款建模工具对比分析比较
- 00---tomcat的安装与配置
- 让Windows下Git和TortoiseGit支持中文文件名/UTF-8
- 类和结构
- vim 常用命令
- 基于同步HTTP双向流(BOSH)的web im机制
- USB驱动程序的编写
- HibernateSystemException: The database returned no natively generated identity value异常
- -人人相册下载器-
- 软件设计之“开-闭”原则
- 126邮箱TAB选项卡效果(同一页面可多次使用)
- 缓冲区分析和对象间转换