专栏首页技术博客C#简单的面试题目(三)

C#简单的面试题目(三)

31.C#提供一个默认的无参构造函数,当我实现了另外一个有一个参数的构造函数时,还想保留这个无参数的构 造函数。这样我应该写几个构造函数?     两个,一旦你实现了一个构造函数,C#就不会再提供默认的构造函数了,所以需要手动实现那个无参构造函数。

32.const和readonly有什么区别?

const关键字用来声明编译时常量,readonly用来声明运行时常量。

33.

用sealed修饰的类有什么特点

sealed 修饰符用于防止从所修饰的类派生出其它类。如果一个密封类被指定为其他类的基类,则会发生编译时错误。

密封类不能同时为抽象类。

sealed修饰符主要用于防止非有意的派生,但是它还能促使某些运行时优化。具体来说,由于密封类用于不会有任何派生类,所以对密封类的实例的虚拟函数成员的调用可以转换为非虚拟调用来处理。

34.虚函数的用法    virtual指明一成员函数为虚函数,而virtual仅用于类的定义里,在类外可不加此关键字。

  一个类的成员函数被定义为虚函数时,子类该函数仍保持虚函数特性。

  子类覆盖此函数时,定义里可不加virtual关键字,但函数声明要和基类的完全一致!且此声明是必须的。

  不是纯虚函数时,父类的虚函数必须要实现。而若将父类的虚函数设定为纯虚函数时,子类必须覆盖之而且必须要实现之。

35.解释virtual、sealed、override和abstract的区别

  virtual申明虚方法的关键字,说明该方法可以被重写

  sealed说明该类不可被继承

  override重写基类的方法

  abstract申明抽象类和抽象方法的关键字,抽象方法不提供实现,由于子类实现,抽象类不可实例化。

36.重载和覆写有什么区别?

  重载是方法的名称相同,不同的参数类型,不同的参数个数,不同的参数顺序。覆写提供了子类中改变父类方法行为的实现(是进行基类中函数的重写)。

37.能够将非静态的方法覆写为静态方法吗?

  不能,覆写方法的签名必须与被覆写方法的签名保持一致,除了将virtual改为override。

38.C#中委托是什么?事件是不是一种委托?

  委托可以把一个方法作为参数传递给另一个方法。委托可以理解为指向一个函数的引用。

  是的,是一种特殊的委托。

39.C#中的堆与栈

  栈(stack)由系统管理生存期,存储代码执行和调用路径,执行或调用完毕即从栈中清除。

  堆(Heap)中保存值和对象,调用完毕之后依然存在,由垃圾回收器查找栈中有无指向该值或对象的引用,无则从堆中删除

40.对泛型的了解,和简单说明一下泛型有什么好处?

   泛型,通过参数化类型来实现在同一份代码上操作多种数据类型。利用参数化类型将类型抽象化,从而实现灵活的复用。

  好处是——类型安全,减少装箱和拆箱,提高性能,减少重复性的编程任务。

41.如何把一个Array复制到ArrayList中

            int[] a = new int[3] { 1, 2, 3 };
            ArrayList array = new ArrayList(a);
            array.AddRange(a);

42.产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。

int[] intArr=new int[100];
ArrayList myList=new ArrayList();
Random rnd=new Random();
while(myList.Count<100)
{
int num=rnd.Next(1,101);
if(!myList.Contains(num))
myList.Add(num);
}
for(int i=0;i<100;i++)
intArr[i]=(int)myList[i];

 43.一个长度为10000的字符串,通过随机从a-z中抽取10000个字符组成。

StringBuilder sb = new StringBuilder(0, 10000); 
        string strABC = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"; 
        string[] ABC = strABC.Split(','); 
        int len = ABC.Length; 
        Random rd = new Random(); 
        for (int i = 0; i < 10000; i++) 
        { 
            sb.Append(ABC[rd.Next(len)]); 
        }

 44.请简述一下用Socket进行同步通讯编程的详细步骤

  • 在应用程序和远程设备中使用协议和网络地址初始化套接字
  • 在应用程序中通过指定端口和地址建立监听
  • 远程设备发出连接请求
  • 应用程序接受连接产生通信scoket
  • 应用程序和远程设备开始通讯(在通讯中应用程序将挂起直到通讯结束)
  • 通讯结束,关闭应用程序和远程设备的Socket回收资源

45.什么是强类型,什么是弱类型?哪种更好些?为什么?

  强类型是在编译的时候就确定类型的数据,在执行时类型不能更改,而弱类型在执行的时候才会确定类型。没有 好不好,二者各有好处,强类型安全,因为它事先已经确定好了,而且效率高。一般用于编译型编程语 言,如c++,java,c#,pascal等,弱类型相比而言不安全,在运行的时候容易出现错误,但它灵活,多用于解释型编 程语言,如javascript,vb等

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C#类和结构体的异同点简单总结

    类和结构的异同点? 异:  1.关键字不同 一个是class,一个是struct     2.类型不同,一个是引用类型,一个是值类型(一个堆区,一个栈区)   ...

    aehyok
  • C#基础知识系列五(构造函数)

      2、不带参数的构造函数称为“默认构造函数”。 无论何时,只要使用 new 运算符实例化对象,并且不为 new 提供任何参数,就会调用默认构造函数。除非类是s...

    aehyok
  • C#项目代码规范

       小菜就是小菜,几个人搞出来的项目,让公司大牛稍微看了下,最后送出了惨不忍睹四个字。命名各种各样,五花八门,大写英文、小写英文、大写拼音、小写拼音、英文和拼...

    aehyok
  • Kotlin Primer·类与对象(上)

    用户1907613
  • Android 组件化最佳实践 ARetrofit 原理

    ARetrofit 是一款针对Android组件之间通信的路由框架,实现快速组件化开发的利器。本文主要讲述 ARetrofit 实现的原理。

    杨振涛
  • springboot发布war包

    DencyCheng
  • Java面试之Java基础知识第一季

    因为这个方法是Java程序的入口方法,JVM在运行程序的时候,会先查找main方法,其中public是权限修饰符,表明任何类和对象都可以访问这个方法,stati...

    mySoul
  • 类模板学习总结

    1.类模板就是给普通的类加上一个参数,参数可以是未知数据类型标识(如int, string,char, class等),也可以是已知数据类型的值,在下面的第二个...

    王亚昌
  • JDK1.7新特性(4):java语言动态性之反射API

    直接通过一个代码示例来熟悉java中通过反射来对构造函数/域以及方法处理的相关API: 1 package com.rampage.jdk7.chapter...

    SecondWorld
  • SAP Spartacus单元测试用例中Component构造函数的调用上下文

    在单元测试时候,观察这两个参数如何被注入的。在构造函数被调用之前,先执行实例的初始化逻辑:

    Jerry Wang

扫码关注云+社区

领取腾讯云代金券