C#

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

string str = null 是不给他分配内存空间,

而string str = "" 给它分配长度为空字符串的内存空间。

 

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

语法定义: 异:

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

       1.都有属性和方法
       2.和类一样可以继承自接口

//定义类的语法    
 
 class Class1
    {
        private string name;
 
        private int age;
 
        public void SayHi()
 
        {
 
            Console.WriteLine("Hello,My Name is " + this.name + ",My Age is " + this.age);
 
        }
 
    }

//定义结构的语法. 
struct Rectangle
    {
 
        private int width;
 
        private int height;
 
        public int GetArea()
 
        {
 
            return this.width * height;
 
        }
 }

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

1.装箱,值类型向引用类型转换:

    在托管堆中分配内存,分配的内存量是类型各字段所需的内存量+类型对象指针所需的内存量+同步块索引所需的内存量。

    值类型的字段复制到分配好的内存中

    返回对象地址,现在对象地址是对象引用

2.拆箱,引用类型向值类型转换:

    获取已装箱类型中的未装箱部分,也就是对象的原始值的各个字段

    复制字段的值从堆中到栈中的值类型实例中
 

 //装箱的例子
            //装箱允许将值类型隐式转化成引用类型还是在Main方法里面
            iint i = 2008;
            object obj = i;
            Console.WriteLine("1.i的值为{0},装箱之后的对象为{1}",i,obj);
            i = 927;
            Console.WriteLine("2.i的值为{0},装箱之后的对象为{1}",i,obj);
            Console.ReadKey();
 
            //程序运行结果
            //1.i的值为2008,装箱之后的对象为2008.
            //2.I的值为927,装箱之后的对象为2008
          //拆箱例子
          //拆箱允许将引用类型显示转换为值类型,下面通过一个实例演示拆箱的过程
            int i = 112;
            object obj = i;
            Console.WriteLine("装箱操作:值为{0},装箱之后的对象为{1}",i,obj);
            int j = (int)obj;
            Console.WriteLine("拆箱操作,装箱的对象为{0},值为{1}", obj, j);
            Console.ReadKey();
         //程序运行后的结果
         //装箱操作:值为112,装箱之后对象为112
         //拆箱操作:装箱对象为112,值为112

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace CH02
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 0;
            int[] num = new int[] { 19, 1, 38, 49, 85, 16, 867, 282 };
            for (int i = 0; i < num.Length - 1; i++)
            {
                for (int j = 0; j < num.Length - 1 - i; j++)
                {
                    if (num[j] > num[j + 1])    //降序改为“<”
                    {
                        a = num[j];
                        num[j] = num[j + 1];
                        num[j + 1] = a;
                    }
                }
            }
            Console.WriteLine("从小到大排序:");
            foreach (int number in num)
            {
                Console.Write(number + "   ");
            }
            Console.ReadKey();
        }
    }
}


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

 static int f(int n)
        {
        //一列数的规则如下:1、1、2、3、5、8、13、21、34......求第30位数是多少,用递归算法实现。
            if (n == 1 || n == 2)
                return 1;
            return f(n - 2) + f(n - 1);
        }
        static void Main(string[] args)
        {
            Console.WriteLine(f(30));
      
      }


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

答:ArrayList,List,Hashtable,Dictionary<key,value>
ArrayList和List获取,删除元素是通过下标或对象名获取;
Hashtable,和Dictionary<key,value>获取,删除元素是通过key获取。
List和Dictionary<key,value>访问元素无须转换。

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

答:const修饰的常量在声明的时候必须初始化;readonly修饰的常量则可以延迟到构造函数初始化;const只读,但不能修改,readonly只读可修改

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

答:ref是引用把值类型转换成弓用,out是输出,区别是ref是输入兼输出的,out只是单纯的输出

public void num(ref int num1, ref int num2){ }
public void num(out int num1, out int num2){ }


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

答:用string += 追加的时候会分配新的地址,StringBuilder不会,所以StringBuilder的运行速度会快,不会浪费资源空间。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值