C#基础02

01:在C#中,string str = null 与 string str = “” 请尽量使用文字或图说明其中的区别

string str=null 把这个引用指向了一个null,没有地址没有值的地方。
string str="" 把这个引用指向了一个地址,地址里面存的是空的字符。

string str=""  就相当于一个人考试了,不过是考了0分;
而 string str=null 就相当于一个人没有考试,所以没有分数,但你不能说他是0分。


02:简述类和结构的相同点和不同点。并用代码举例。

异:  1.关键字不同 一个是class,一个是struct
    2.类型不同,一个是引用类型,一个是值类型(一个堆区,一个栈区)
        3.成员不同,结构体没有默认的构造函数(可以添加)和没有析构函数,不可以使用abstract,protected,sealed修饰
        4.Struct变量使用完之后就自动解除内存分配,Class实例有垃圾回收机制来保证内存的回收处理
        5.继承性。结构不可以继承自另一个结构或被继承,但和类一样可以继承自接口
        6.在结构体中可以声明字段,但是声明字段的时候是不能给初始值的.
        7.实体类中如果我们没有显示的定义构造函数,那么会有一个隐式无参的构造函数(重载构造函数之后,需要显示声明无参构造函数),而在结构体中隐身无参的构造函数无论如何都存在
        8.在类中可以显示的定义无参的构造函数,而在结构体中我们不能显示的定义无参的构造函数
        9.结构体是可以New的,而结构体构造函数要求必须要为所有的字段赋值.即使是无参的构造函数,也会给值类型赋初值为    0,引用类型赋初值为null
同: 1.都有属性和方法
       2.和类一样可以继承自接口

//用struct声明
    public struct Class1
    {
        public string name;//不能设初值
    }


 static void Main(string[] args)
        {
            Class1 class1;//无需new 直接定义对象即可
            class1.name = "张三";//必须赋初值
        }  
 //用class声明
    public class Class1
    {
        public string name="张三";//可以设初值
    }

static void Main(string[] args)
        {
            Class1 class1=new Class1();//需要new 初始化对象才可以使用
            class1.name = "张三";//无需赋初值
        }  


03:什么是拆箱和装箱?举例说明

装箱 将值类型转换成引用类型。

int a = 0;//值类型
string b = a.ToString();//装箱成引用类型

拆箱 将引用类型转换成值类型。

string a = "0";//引用类型
int b = Convert.ToInt32(a);//拆箱成值类型

04:编程实现一个冒泡排序

            int[] nums = { 1,5,4,2,3};
            for (int i = 0; i < nums.Length; i++)
            {
                for (int j = i+1; j < nums.Length; j++)
                {
                    //该数与其后面的数相比较,如果大于后面的数,则互相调换位置
                    if (nums[i]>nums[j])
                    {
                        int temp = nums[i];
                        nums[i] = nums[j];
                        nums[j] = temp;
                            
                    }
                }
            }


05:编程实现一个递归方法

        public int Add(int a) {
            if (a==1||a==2)
            {
                return a;
            }
            //自己调自己
            return Add(a - 2) + Add(a - 1);
        }


06:说说目前学的集合有哪些?,每一种集合的特点以及使用场景

ArrayList:可以进行动态维护,访问元素时需要进行类型转换。对于需要快速随机访问元素,使用ArrayList

Hashtable:元素以键/值对的方式存在。访问元素时需要进行类型转换。对于需要以键值对存储的元素,使用ArrayList

List<T>:可以进行动态维护,访问元素时无需进行类型转换。对于常常处理不同类型数据转换的类,可以使用泛型定义。

Dictionary<K,V>:元素以键/值对的方式存在。访问元素时无需进行类型转换。


07:变量被标记为 “const” 和readonly” 有何不同?

1)const修饰的常量在声明的时候必须初始化;readonly修饰的常量则可以延迟到构造函数初始化 

2)const修饰的常量在编译期间就被解析,即常量值被替换成初始化的值;readonly修饰的常量则延迟到运行的时候

此外const常量既可以声明在类中也可以在函数体内,但是static readonly常量只能声明在类中。

08:“out” 和 “ref” 参数有何不同?用代码举例

        public string Out(out string str) {
            str = "1";//必需先要为str参数赋值
            return str;
        }
        
        static void Main(string[] args)
        {
            Class1 class1 = new Class1();
            string str;
            //只出不进 out参数在进入方法的时候,C#会自动清空它的一切引用和指向
            Console.WriteLine(class1.Out(out str));
        }
        public string Ref(ref string str) 
        {
            str = "1";//必需先要为str参数赋值
            return str;
        }



        static void Main(string[] args)
        {
            Class1 class1 = new Class1();
            string str="0";//ref参数的参数必须最先初始化
            //是有进有出  ref参数在使用前必需初始化
            Console.WriteLine(class1.Ref(ref str));
        }

ref使用中,初始化,必须赋值,否则报错,使用中,输出的时候,不需要赋值

out使用中,初始化没有赋值,不会报错,使用中,输出结果的时候必须赋值,否则会报错


09:“StringBuilder” 和 “String” 有何不同?

String声明之后在内存中大小是不可修改的,而StringBuilder可以自由扩展大小(String分配在栈区,StringBuilder分配在堆区)

 

技术交流+v:15580072981

               +Q:2512378779

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值