类和结构
类是引用类型,将一个对象引用分配给新变量时,新变量会引用原始对象。由于它们引用的是相同的数据(地址相同),所以通过一个变量做的更改会体现到另一个变量上。
//创建对象和引用
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#编程指南