当前位置: 首页 > article >正文

类与结构体实例(Class和Struct)——C#学习笔记

由于类是引用类型,因此类对象的变量引用该对象在托管堆上的地址。

以下为类实例:

以上实例中,当person2改名字后,person1的名字也随之改变,因为对象本身变了。而struct则不会出现这种情况,当person P 2 = P1时,struct是复制了整个对象。

  Console.WriteLine(person2.Equals (person1));//true

结果为true,说明 两个变量引用同一个对象。

using System;

namespace 创建人族
{
   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 a new person, assign person1 to it.
        Person person2 = person1;

        //当person2名字改变时,person1名字也变了,因为他们两个引用同一个对象,对象本身改变了.
        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 运算符来创建。

 以下为结构体实例:

代码如下:

using System;

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 a 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 a new struct object. Note that a 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 a 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
*/


 


http://www.kler.cn/a/297302.html

相关文章:

  • 最近对GFM有点感兴趣,偶读石川老师关于这方面的文章,很感兴趣,整理他的讲稿如下
  • 装WebVideoCreator记录
  • 分组注解和自定义注解及分页查询
  • 数据结构可视化
  • 天命所归,SyntaxFlow助大圣取得真经
  • 不到200行代码,一键写出简单贪吃蛇网页游戏!附详细代码!快来看看吧!
  • 分布式锁-缓存一致性问题-失效模式
  • 昔日洗衣液一哥偏执于直播带货市值缩水九成 或成胡干失败样板
  • VScode:前端开发中的常用快捷键和技巧
  • 分享 | 某省级城商行用零信任破解远程访问安全风险
  • 滑动窗口系列(背向双指针)9/8
  • [git操作] git创建仓库上传github报错
  • 并发编程(六)
  • vue3 cookie 存取删数据
  • 镭速助力构筑ICT安全高效的大文件传输
  • 【android10】【binder】【2.servicemanager启动——全源码分析】
  • MySQL数据归档策略:实现定期数据维护与优化
  • 数据结构—单链表的基本操作
  • Vue3进阶:异步状态示例
  • Docker 学习 Day 1