2019整合C#面试题(1)

  • 2019整合C#面试题(1)已关闭评论
  • 671 views
  • A+
所属分类:编程技术

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

private : 私有成员, 在类的内部才可以访问(只能从其声明上下文中进行访问)。
protected : 保护成员,该类内部和从该类派生的类中可以访问。
Friend:友元 ,声明 friend 元素的程序集中的代码可以访问该元素,而不能从程序集外部访问。
Protected Friend:在派生类或同一程序集内都可以访问。
public : 公共成员,完全公开,没有访问限制。
internal: 在同一命名空间内可以访问。 (很少用)
2.列举ASP.NET页面之间传递值的几种方式

1.使用QueryString,  如....?id=1; response. Redirect()....

2.使用Session变量

3.使用Server.Transfer

4.使用Application

5.使用Cache

6使用HttpContext的Item属性

7.使用文件

8.使用数据库

9.使用Cookie

 

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

public class MainClass {

public static void Main()  {  Console.WriteLine(Foo(30));  }

public static int Foo(int i) {

if (i <= 0) return 0;

else if(i > 0 && i <= 2) return 1;

else return Foo(i -1) + Foo(i - 2);

}

}

 

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

委托是将一种方法作为参数代入到另一种方法。

是,事件是一种特殊的委托。  //比如:onclick事件中的参数就是一种方法。

 

5.实现多态的过程中 overload 重载 与override 重写的区别

override 重写与 overload 重载的区别。重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要

Override 是进行基类中函数的重写。实现多态。

 

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

  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 ;

      }

    }

  }

或者

  public static void bubble_sort(int[] x)
        {
            for (int i = 0; i < x.Length; i++)
            {
                for (int j = i; j < x.Length; j++)
                {
                    if (x[i] < x[j])    //从大到小排序
                    {
                        int temp;
                        temp = x[i];
                        x[i] = x[j];
                        x[j] = temp;
                    }
                }
            }
        }
        static void Main(string[] args)
        {
            int[] huage = { 1, 5, 2, 9, 3, 7, 6,4,8,0};
            bubble_sort(huage);
            foreach (var a in huage)
            {
                Console.WriteLine(a );
            }
        }

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

C#通过提供索引器,可以象处理数组一样处理对象。特别是属性,每一个元素都以一个get或set方法暴露。索引器不单能索引数字(数组下标),还能索引一些HASHMAP的字符串,所以,通常来说,C#中类的索引器通常只有一个,就是THIS,但也可以有无数个,只要你的参数列表不同就可以了索引器和返回值无关, 索引器最大的好处是使代码看上去更自然,更符合实际的思考模式.

微软官方一个示例:
索引器允许类或结构的实例按照与数组相同的方式进行索引。
索引器类似于属性,不同之处在于它们的访问器采用参数。
在下面的示例中,定义了一个泛型类(class SampleCollection<T>
),并为其提供了简单的 get  和 set 访问器 方法(作为分配和检索值的方法)。Program 类为存储字符串创建了此类的一个实例。
class SampleCollection<T>
{
private T[] arr = new T[100];
public T this[int i]   //注意,定义索引器。this 关键字用于定义索引器。
    {
get
{
return arr[i]; //访问器采用参数
}
set
{
arr[i] = value; //访问器采用参数
}
}
}
// This class shows how client code uses the indexer
class Program
{
static void Main(string[] args)
{
SampleCollection<string> stringCollection = new SampleCollection<string>();
stringCollection[0] = "Hello, World"; //这里 使用索引器进行引用
System.Console.WriteLine(stringCollection[0]);
}
}
  • 索引器使得对象可按照与数组相似的方法进行索引。
  • get 访问器返回值。set 访问器分配值。
  • this 关键字用于定义索引器。
  • value 关键字用于定义由 set 索引器分配的值。
  • 索引器不必根据整数值进行索引,由您决定如何定义特定的查找机制。
  • 索引器可被重载。
  • 索引器可以有多个形参,例如当访问二维数组时。

8.用.net做B/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?

使用MVC模式分层

一般为3层

数据访问层,业务层,表示层。

数据访问层对数据库进行增删查改。

业务层一般分为二层,业务表观层实现与表示层的沟通,业务规则层实现用户密码的安全等。

表示层为了与用户交互例如用户添加表单。

 

9.用.netB/S结构的系统,您是用几层结构来开发,每一层之间的关系以及为什么要这样分层?

优点:  分工明确,条理清晰,易于调试,而且具有可扩展性。

缺点:  增加成本。

 

10.在下面的例子里

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);  }

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

X=1,Y=0;

 

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin
助力产业智慧升级,云服务器首年88元起,更有千元代金券礼包免费领!