C#学习笔记——类和结构

类和结构

  类是引用类型,将一个对象引用分配给新变量时,新变量会引用原始对象。由于它们引用的是相同的数据(地址相同),所以通过一个变量做的更改会体现到另一个变量上。

//创建对象和引用
public void Main()
{
     //创建一个对象
     Customer object1 = new Customer();
     //创建一个对象引用
     Customer object2; 

     //创建两个指向同一个对象的引用,当改变其中一个时,另一个也会体现出变化
     Customer object3 = new Customer();
     Customer object4 = object3;

 }
//类实例
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
}

class Program
{
    static void Main()
    {
        Person person1 = new Person("Leopold", 6);
        //person1 Name = Leopold Age = 6
        Console.WriteLine("person1 Name = {0} Age = {1}", person1.Name, person1.Age);
        Person person2 = person1;

        //改变person2的属性值,person1也会跟着改变
        person2.Name = "Molly";

        //person2 Name = Molly Age = 16
        //person1 Name = Molly Age = 16
        Console.WriteLine("person2 Name = {0} Age = {1}", person2.Name, person2.Age);
        Console.WriteLine("person1 Name = {0} Age = {1}", person1.Name, person1.Age);

        //按任意键退出
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();

    }
}

  结构是值类型。将结构分配给新变量时,会复制结构。新变量和原始变量是包含相同数据的两个副本,对其中一个副本进行更改不会影响另一个副本。【适用于大多数数据不得在结构创建之后修改的小型数据结构】

//结构实例
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()
    {
        Person p1 = new Person("Alex", 9);
        //p1 Name = Alex Age = 9
        Console.WriteLine("p1 Name = {0} Age = {1}", p1.Name, p1.Age);
        Person p2 = p1;

        //改变p2的属性值
        p2.Name = "Spencer";
        p2.Age = 7;
        //p2 Name = Spencer Age = 7
        Console.WriteLine("p2 Name = {0} Age = {1}", p2.Name, p2.Age);

        //p1 Name = Alex Age = 9(p1的值不随p2改变)
        Console.WriteLine("p1 Name = {0} Age = {1}", p1.Name, p1.Age);

        //按任意键退出
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
//判断结构实例的实例字段是否具有相等的值
Person p1 = new Person("Wallace", 75);
Person p2;
p2.Name = "Wallace";
p2.Age = 75;
//此处相等
if (p2.Equals(p1))
    Console.WriteLine("p2 and p1 have the same values.");

类:

  C#中只允许单一继承,即一个类只能从一个基类继承实现,但可以实现多个接口。

class ClassA : BaseClass {}
class ClassB : IFace1, IFace2 {}

结构:

  相比于类,结构受到很多限制:
1、结构中,只有声明为const或static的字段才能初始化;
2、结构不能声明没有参数的构造函数(默认构造函数)或终结器;
3、结构无法继承自一个结构或者类,也不能成为一个类的基类。所有结构都直接继承自System.ValueType,而System.ValueType继承自System.Object
4、结构可以实现接口;
5、结构可以不用new实例化,没new的结构引用中的所有值都为null且对象不可用(没有调用构造函数),必须初始化所有字段之后才能使用该对象。





参考资料:
微软.Net文档-C#编程指南

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值