• .NET常见问题汇总


    1.简述 private、 protected、 public、 internal 修饰符的访问权限。

    答:private 私有,成员只能由定义类型或者任何嵌套类型中的方法使用;

      protected 受保护, 成员只能由定义类型、任何嵌套类型或者不管在什么程序集中的派生类型中的方法访问;

      public 公有,成员可在任何程序集中的任何类型的任何方法访问;

      internal 程序集内公有,成员可在程序集内的任何方法中访问。

    2.一列数的规则如下: 1、1、2、3、5、8、13、21、34......  求第30位数是多少,用递归算法实现。

    答:

     1 static Int32 GetRecursionValue(Int32 num)
     2         {
     3             if (num <= 0)
     4             {
     5                 return 0;
     6             }
     7             else if (num > 0 && num <= 2)
     8             {
     9                 return 1;
    10             }
    11             else
    12             {
    13                 return GetRecursionValue(num - 1) + GetRecursionValue(num - 2);
    14             }
    15         }

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

    答: 委托是一种特殊的数据类型,它指向方法,可以看做是指向方法的指针,通过委托可以把方法作为参数来进行传递;

      事件是一种特殊的委托。

    4.override与重载的区别

    答:override是重写,重写只存在与类和父类中,重写是实现对父类方法的重新实现;重载存在于一个类中,一般用于在一个类中实现若干重载的方法,这些方法的名称相同而参数形式不同。

    5.请编程遍历页面上所有TextBox控件并给它赋值为string.Empty

    答:

    1 foreach (var item in this.Controls)
    2             {
    3                 if (item is TextBox)
    4                 {
    5                     (item as TextBox).Text = String.Empty;
    6                 }
    7             }

    6.请编程实现一个冒泡排序算法?

     1 static void sort(Int32[] arrays)
     2         {
     3             Int32 temp = 0;
     4             for (int i = 0; i < arrays.Length; i++)
     5             {
     6                 for (int j = i+1; j < arrays.Length; j++)
     7                 {
     8                     if (arrays[j] > arrays[j + 1])
     9                     {
    10                         temp = arrays[j];
    11                         arrays[j] = arrays[j + 1];
    12                         arrays[j + 1] = temp;
    13                     }
    14                 }
    15             }
    16         }

    7.描述一下C#中索引器的实现过程,是否只能根据数字进行索引?

    答:c#中的索引器是有参属性,属性的本质其实是方法;不是只能根据数字进行索引。

    8.求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m

    答:

     1 static void Function(Int32 m)
     2         {
     3             Int32 sum = 0;
     4             for (int i = 0; i < m; i++)
     5             {
     6                 if (i % 2 == 0)
     7                 {
     8                     sum -= i;
     9                 }
    10                 else
    11                 {
    12                     sum += i;
    13                 }
    14             }
    15         }

    9.在下面的例子里

    using System;
    
         class A
    
         {
    
              public A()
    
               {
    
                    PrintFields();
    
               }
    
              public virtual void PrintFields(){}
    
          }
    
          class B:A
    
          {
    
               int x=1;
    
               int y;
    
               public B()
    
        {
    
                   y=-1;
    
               }
    
               public override void PrintFields()
    
               {
    
                   Console.WriteLine("x={0},y={1}",x,y);
    
               }
    View Code

    当使用new B()创建B的实例时,产生什么输出?

    答:输出:x=1 y=0;

    解析:构造B的实例的时候会先调用其基类的构造函数,此时x=1,y为其默认初始值0。

    10.什么叫应用程序域?

    答:应用程序域即AppDomain,为了保证代码的键壮性CLR希望不同服务功能的代码之间相互隔离,这种隔离可以通过创建多个进程来实现,但操作系统中创建进程是即耗时又耗费资源的一件事,所以在CLR中引入了AppDomain的概念,AppDomain主要是用来实现同一进程中的各AppDomain之间的隔离.

    11.CTS、CLS、CLR分别作何解释?

    答:CTS Common type System 通用系统类型; CLS Common Language Specifcation 公共语言规范;CLR Common Language Runtime 公共语言运行时。

    12.什么是装箱和拆箱?

    答:值类型转换为引用类型称为装箱,引用类型转换为值类型称之为拆箱。

    13.什么是受托管的代码?

    答:受托管的代码是指运行在.NET公共语言运行时CLR的代码,unsafe标识非托管代码,不经过CLR运行,需要程序员自行分配和释放内存空间。

    14.什么是强命名程序集?

    答:弱命名和强命名的.net程序集在结构上是一致的,他们都有相同的(PE)格式(PE+)头,CLR头,metaData,maniftest和IL,其区别在于强命名的程序集有发布者的公钥和私钥对。对于弱命名的.net程序集他只能被一个程序调用,要想使程序集被多个程序共享使用或者是编写类库,必须对程序集进行强命名。对于一个强命名的程序集,CLR通过下面的信息来唯一的识别它:a.文件名但是不包括扩展名;b.版本号Version 如1.02.232.1;c.文化Cultrue如“en-us”;d.公钥的散列值,PublicKeyToken 如b03f5f7f11d50a3a。在弱命名的情况下,CLR会忽略程序集的版本号,只是当需要使用卫星程序集的时候使用文化信息,在发布程序的时候微软建议使用强命名的程序集,由于公钥私钥的存在,这样做可以有效避免同名同版本同文化的程序集的冲突。

    15.在.net中,配件的意思是?

    答:是指程序集。

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

    答:str=null是指声明字符串str,但不给他分配内存空间,str=“”,是指声明字符串str,给它分配长度为""的内存空间。

    17.请详述在.net中类(class)与结构(struct)的异同?

    答:类是引用类型,可被实例化,其值分配在堆上,结构体是值类型,其值分配在栈上。

    18.分析以下代码,完成填空

    string strTmp = "abcdefg某某某";
    
    int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;
    
    int j= strTmp.Length; 
    View Code

    以上代码执行完后,i= j=?

    答: i=13,j=10

    19.根据线程安全的相关知识,分析以下代码,当调用test方法时i>10时是否会引起死锁?并简要说明理由。

    public void test(int i)
    {
       lock(this)
     {
       if (i>10)
       {
         i--;
         test(i);
       }
     }
    }
    View Code

    答:不会发生死锁,但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生。

    20.公司要求开发一个继承System.Windows.Forms.ListView类的组件,要求达到以下的特殊功能:点击ListView各列列头时,能按照点击列的每行值进行重排视图中的所有行 (排序的方式如DataGrid相似)。根据您的知识,请简要谈一下您的思路。

    答:点击列头时获取该列的列ID,根据列ID将该列的所有行值重新排序重新绑定值。

    21.面向对象语言的三大特性?

    答:封装、继承、多态

    22.能用foreach遍历访问的对象需要实现的接口和方法是?

    答:实现IEnumerable接口,实现GetEnumerator方法.

    23.什么是GC,为什么要有GC?

    答:GC是垃圾回收器。它对托管堆上的内存进行管理,实现垃圾内存的回收,程序员不需要关心内存的管理与释放。

    24.Sting s=new String("xyz");,创建了几个对象?

    答;创建两个对象,一个是对象“xyz”,另一个是指向该对象的对象s.

    25.abstract class和interface有什么区别?

    答:abstract class是抽象类,本质上还是一个类,interface是接口,是用来实现的,用来规范约束实例的一些行为;

        声明方法的存在而不去实现它的类被叫做抽象类,它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现类的情况,也不能实现抽象类的实例,然而可以创建一个变量,其类型是一个抽象类,并让它指向某一个具体的子类的一个实现。不能有抽象构造函数或者抽象的静态方法,抽象类的子类为他们父类中的所用方法提供实现,否则他们也是抽象类,取而代之,在子类中实现该方法,知道其行为的其他类可以在类中实现这些方法。

       接口是抽象类的变体,在接口中,所用方法都是抽象的,多继承性可通过实现这样的几口而获得,接口中所有方法都是抽象的,没有一个程序体,接口只可以定义static final成员变量,接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时他定义所有这种接口的方法,然后他可以在实现了该接口的类的任何对象上调用该接口的方法。

    26.启动一个线程使用Run()还是start()?

    答:启用一个线程用Start()方法.

    27.接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实体类?

    答:接口可以继承接口,抽象类可以实现接口,抽象类可以继承实体类,但前提是实体类必须有明确的构造函数。

    28.构造函数是否可以被override?

    答:构造器不能被继承,所以不能被override,但是构造函数可以重载。

    29.是否可以继承string类?

    答:string 类是密封类,所以不可以被继承。

    30.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

     答:finally中的代码一定会被执行,在return之前执行。

    31.两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?

    答:不对,如果两个对象值相等,那么它们的hascode一定也相等。

    32.数组有没有length()这个方法? String有没有length()这个方法?

    答:数组和String都没有length()这个方法,它们有Length属性。

    33.sleep() 和 wait() 有什么区别?

    答:sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级(b)正在运行的线程因为其它原因而阻塞。

           wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

    34.进程和线程的区别?

    答:进程是系统进行资源分配和调度的单位,线程是CPU调度和分配的单位,一个进程可以有多个线程,这些线程共享这个进程的资源。

    35.栈和堆的区别?

    答:栈:由编译器自动分配、释放,在函数体中定义的变量即局部变量通常在栈上;堆:一般由程序员分配释放,new,malloc等内存分配函数分配得到的就是在堆上。

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

    static Int32[] Function()
            {
                Int32[] result = new Int32 [100];
                ArrayList mylist = new ArrayList();
                Random random = new Random();
                while (mylist.Count < 100)
                {
                    Int32 num = random.Next(1,101);
                    if (!mylist.Contains(num))
                    {
                        mylist.Add(num);
                    }
                }
                for (int i = 0; i < mylist.Count; i++)
                {
                    result[i] = (Int32)mylist[i];
                }
                return result;
            }

    37.在c#中using和new这两个关键字有什么意义,请写出你所知道的意义?using 指令和语句 new 创建实例 new 隐藏基类中方法。

    答:using可用作引入命名空间或使用非托管资源,使用完对象后自动执行实现了IDisposable接口的Dispose方法;

           new 新建实例或者隐藏父类方法。

    38.需要实现对一个字符串的处理,首先将该字符串首尾的空格去掉,如果字符串中间还有连续空格的话,仅保留一个空格,即允许字符串中间有多个空格,但连续的空格数不可超过一个。

    答:

    static String DealStringFun(String sourceStr)
            {
                String result = sourceStr;
                result = sourceStr.Trim();
                result=Regex.Replace(result," *"," ");
                return result;
            }

    39.下面这段代码输出什么?为什么?

    int i=5;
    
    int j=5;
    
    if (Object.ReferenceEquals(i,j))
    
    Console.WriteLine("Equal");
    
    else
    
    Console.WriteLine("Not Equal");
    View Code

    答:输出Not Equal,因为比较的是两个对象,该算法存在装箱。

    40.什么是反射?

    答:动态获取程序集信息。

    41.什么是虚函数,什么是抽象函数?

    答:虚函数:没有实现的,可由子类继承并重写的函数。抽象函数:规定其非虚子类必须实现的函数,必须重写。

    42.c#中property和attribute的区别?

    答:一个数属性,用于存取类的字段,一个是特性,用来标识类、方法等得附加性质。

    43.c#中的三元运算符?

    答:?:

    44.当整数a赋值给一个object对象时,整数a将会被?

    答:值类型转换为引用类型,装箱。

    45.类成员的访问形式?

    答:类内部访问,通过this指针访问,类外部访问,通过类实例来访问。

    46.float f=-123.567F; int i=(int)f;i的值现在是?

    答:-123.

    47.委托声明的关键字是?

    答:delegate

    48.用sealed修饰的类有什么特点?

    答:是密封类,不能被继承。

    49.在Asp.net中所有的自定义用户控件都必须继承自?

    答:control;

    50.在.Net中所有可序列化的类都被标记为?

    答:[serializable]

    51.在.net托管代码中我们不用担心内存泄漏,这是因为有了?

    答:GC垃圾回收器。

    52.net错误处理机制是什么?

    答:.net错误处理机制采用try-catch-finally结构,发生错误时,层层上抛,直到找到匹配的catch为止。

    53.&与&&的区别。

    答:&是位运算,标识按位与,&&是逻辑运算符,标识逻辑与。

    54.Error和Exception有什么区别?

    答:error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

  • 相关阅读:
    ubuntu安装mysql并修改编码为utf-8
    ubuntu16.04安装jdk1.8
    解决 Can't Connect to MySQL Server on IPAddress (10061) 的问题
    使用开源数据库客户端DBeaver连接DB2数据库
    Windows下使用console线连接思科交换机
    win7安装JDK6
    Python将excel文件从xls转换为xlsx
    Windows使用Gitblit搭建Git服务器
    B树、B-树、B+树、B*树
    必须熟悉的vim快捷键操作
  • 原文地址:https://www.cnblogs.com/mohanchen/p/9424650.html
Copyright © 2020-2023  润新知