深入了解C#基础

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

string str= " ",表示一个空串,被实列化了,占用了内存空间,
string str=null,表示一个空引用,没有占用了空间,
在做TextBox时候就知道了。你不要输入任何东西。如果你写成
if(textBox.text==null)
MessageBox.show();

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

1.类型不同:结构是一种值类型,而类是引用类型。值类型用于存储数据的值,引用类型用于存储对实际数据的引用。那么结构体就是当成值来使用的,类则通过引用来对实际数据操作。

2.存储不同:结构使用栈存储,而类使用堆存储。栈的空间相对较小.但是存储在栈中的数据访问效率相对较高.堆的空间相对较大.但是存储在堆中的数据的访问效率相对较低。

3.作用不同:类是反映现实事物的一种抽象,而结构体的作用只是一种包含了具体不同类别数据的一种包装,结构体不具备类的继承多态特性。

4.关键字不同:在类中可以使用但是在结构中限制使用的关键字有:abstract、sealed、protected;StaTIc关键字可以用在类名前面用来声明静态类,但是不能用在struct前面,不存在静态结构。

5.初始化不同:类可以在声明的时候初始化,结构不能在申明的时候初始化(不能在结构中初始化字段),否则报错。

类的实质是一种数据类型,类似于int、char等基本类型,不同的是它是一种复杂的数据类型。因为它的本质是类型,而不是数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作。

在C语言中,为了实现我想要的结构,可以自定义定义结构体类型,将多个相关的变量包装成为一个整体使用。在结构体中的成员,可以是相同、部分相同,或完全不同的数据类型。在C语言中,结构体不能包含函数。

在面向对象的程序设计中,对象具有状态(属性)和行为,状态保存在成员变量中,行为通过成员方法(函数)来实现。C语言中的结构体只能描述一个对象的状态,不能描述一个对象的行为。在C++中,对结构体进行了扩展,C++的结构体可以包含函数。

public struct Person
{
string Name;
int height;
int weight
public bool overWeight()
{
//implement something
}
}
类示例:
public class TestTime
{
int hours;
int minutes;
int seconds;
public void passtime()
{
//implementation of behavior
}
}
调用过程:
public class Test
{
public static ovid Main
{
Person Myperson=new Person //声明结构
TestTime Mytime=New TestTime //声明类
}
}

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

装箱:

就是将值类型转换成引用类型

//装箱;装箱就是指将值类型转换成引用类型
            int n1 = 10;
            object o1 = n1;   //发生了装箱

拆箱:

就是将引用类型转换成值类型

//拆箱;拆箱就是指将引用类型转换成值类型
            int n2 = (int)01; //发生了拆箱

发生装箱和拆箱操作到底好不好呢?

发生装箱和拆箱是不好的,因为他会影响系统的运行效率

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

int [] array = new int [*] ;

  int temp = 0 ;

  for (int i = 0 ; i < array.Length - 1 ; i++)

  {

    for (int j = i + 1 ; j < array.Length ; j++)

    {

      if (array[j] < array[i])

      {

        temp = array[i] ;

        array[i] = array[j] ;

        array[j] = temp ;

      }

    }

  }

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

public static int result(int n){
		//设置边界,防止进入死循环		
if(n == 1){	
		
return 1;		
}			//上一次的结束是下一次的开始,不停地调用自身,直至达到边界并退出		return  n*result(n-1);		
}

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

HashTable键值对:可以存储任意的键值对类型。
Directory键值对:只能存储特定的键值对类型,相比上面避免了频繁的拆箱和装箱。
ArrayList可以存放多种类型进去
List泛型集合:只可以存储一种数据类型,相比上面也是避免了频繁的拆箱和装箱,提高了程序运行效率。

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


  1)const修饰的常量在声明的时候必须初始化;readonly修饰的常量则可以延迟到构造函数初始化 
   2)const修饰的常量在编译期间就被解析,即常量值被替换成初始化的值;readonly修饰的常量则延迟到运行的时候
      此外const常量既可以声明在类中也可以在函数体内,但是static readonly常量只能声明在类中。


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

static void Main(string[] args)
        {
            string str = "初始化赋值";
            MethodOut(out  str);
            Console.ReadKey();
        }

        /// <summary>
        /// 只出不进  原来out参数在进入方法的时候,C#会自动清空它的一切引用和指向,所以在上面的out例子中,必需先要为str参数赋值
        /// </summary>
        /// <param name="str"></param>
        public static void MethodOut(out string str)
        {

            str = "Hello World!  ---out";
            Console.WriteLine(str);
        }

 

//ref参数的参数必须最先初始化,
        static void Main(string[] args)
        {
            string str = "初始化赋值";
            MethodRef(ref str);

            Console.ReadKey();
        }

        /// <summary>
        /// 是有进有出  ref参数在使用前必需初始化,而out不需要。
        /// </summary>
        /// <param name="i"></param>
        public static void MethodRef(ref string str)
        {
            str = "Hello World! --Ref";
            Console.WriteLine(str);
        }

 1、可以验证ref 和 out 都是传递地址,都会改变具体的值,ref 是有进有出,Out 是 只出不进,

 2、ref可以把参数的数值传递进函数,

 3、out是把参数清空,就是说你无法把一个数值从out传递进去,out进去后,参数的数值为空(参数不能拿到具体数值),所以你必须初始化一次!

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

如果一个对象被声明为一个 string类的实例,那么这个对象中存储的字符以及它的长度都是不能被改变的。

 

 

与 string类型不同, StringBuilder类型表示值为可变字符序列的类似字符串的对象。之所以说值是可变的,是因为可以对 StringBuilder对象进行追加、移除、替换或插入字符来对其进行修改,这点与 string类型恰恰相反。大多数修改 StringBuilder实例的方法都返回对同一实例的引用,由于返回的是对实例的引用,因此可以调用该引用的方法或属性,

 

 

System.String是不可变的字符串。System.StringBuilder存放了一个可变的字符串,并提供了一些对这个字符串修改的方法。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值