C#基础知识(十)——对象引用

    xiaoxiao2025-05-21  7

    一、对象的引用:

    1、结构和类的区别:

    值类型的值存在栈上,引用类型的栈上存的是地址,值是在堆上。

    类:类是引用类型。类当中默认有一个无参数的构造函数,当在类中写一个有参数的构造函数时,默认无参数的构造函数被干掉了。类中写构造函数参数列表中参数个数可以不确定。

    结构:结构是值类型。在结构中默认的也有一个无参数的构造函数。在结构中写一个有参数的构造函数,默认的无参数的构造函数还有,没被干掉。在结构中写构造函数,要把所有的字段都要完全赋值。

    例子:

    static void Main(string[] args) { Person p1 = new Person(); p1.Age = 20; p1.Gender = '男'; Person p2 = new Person(); p2 = p1; p2.Age = 100; p2.Gender = '女'; Console.WriteLine(p1.Age); Console.WriteLine(p1.Gender); Console.WriteLine(p2.Age); Console.WriteLine(p2.Gender); Console.ReadKey(); } public struct Person //<span style="font-family: Arial, Helvetica, sans-serif;">public class Person是类,显示结果为100女,100女;public struct Person是结构,显示结果是20男,100女。</span> { private string _name; public string Name { get { return _name; } set { _name = value; } } private char _gender; public char Gender { get { return _gender; } set { _gender = value; } } private int _age; public int Age { get { return _age; } set { _age = value; } } public void Show() { Console.WriteLine("{0}岁的{1}是传智播客最可爱的{2}老师",_age,_name,_gender); } }

    2、堆和栈的区别:

    栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;局部值类型变量、值类型参数等都在栈的内存中。

    堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存大小。

    3、值类型和引用类型的区别:

    (1)将一个值类型变量赋值给另一个值类型变量时,将复制包含的值。引用类型变量的赋值只复制对对象的引用,而不复制对象本身。

    (2)值类型不可能派生出新的类型:所有的值类型均隐式派生自System.ValueType。但与引用类型相同的是,结构也可以实现接口。

    (3)值类型不可能包含null值。

    (4)每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。

    4、继承:类型转换的四种情况

    Student stu = new Student(); Person p = stu; p.Show(); Console.ReadKey(); Person p = new Teacher();//如果new的是子类,转换的时候,转的是另一个子类,报异常。 Student stu = (student)p; stu.SayHello(); Console.ReadKey(); Person p = new Teacher();//如果new的时候,new的是子类,那么再转换这个子类的时候,可以 Teacher t = (Teacher)p; t.SayHi(); Person p = new Person(); Student stu = (Student)p;//父类对象不能直接转换成子类,异常 stu.SayHello(); 二、ArrayList和HashTable:

    ArrayList,动态数组,集合。可以将集合看作为“长度可变的,具有很多方法的数组”。

    使用时需要引用 System.Collections命名空间

    用法:

    ArrayList arrayList = new ArrayList(); arrayList.Clear();//清空 arrayList.Contains(1);//判断这个集合中是否包含这个元素 int num = arrayList.Count;//集合中元素的个数 int number = arrayList.IndexOf(2);//找某一元素对应的索引 int[] nums = { 1, 2, 3 }; arrayList.InsertRange(4, nums);//往某一个索引位置插入一个数组 arrayList.Remove(1);//移除第一个括号内的元素 arrayList.RemoveAt(1);//移除索引对应的值 arrayList.RemoveRange(3, 100);//从指定索引处开始移除,移除多少个,如果超出索引报异常 for (int i = 0; i < 100; i++) { arrayList.Add(i); } arrayList.Reverse();//反转 arrayList.Sort();//排序 HashTable,哈希表,以键值对的形式储存,键值对均是object类型。添加数据都是“键值对”的形式。表示键/值对的集合,这些键/值对根据键的哈希代码进行组织。。

    转载请注明原文地址: https://ju.6miu.com/read-1299126.html
    最新回复(0)