1.什么是 .NET
.NET是一种用于构建多种应用的免费开源开发平台,可以使用多种语言,编辑器和库开发Web应用、Web API和微服务、云中的无服务器函数、云原生应用、 移动应用、桌面应用、Windows WPF、Windows窗体、通用 Windows平台 (UWP)、游戏、物联网 (IoT)、机器学习、控制台应用、Windows服务。.NET类库 在不同应用和应用类型中共享功能,无论构建哪种类型的应用,代码和项目文件看起来都一样,可以访问每个应用的相同运行时、API和语言功能。
2.NET的概念
.NET Framework:.NET框架(.NET Framework) 是由微软开发,一个致力于敏捷软件开发(Agile softwaredevelopment)、快速应用开(Rapidapplication development)、平台无关性和网络透明化的软件开发平台。 C#:C#是由微软开发的基于.NET Framework的一种面向对象的广泛应用的高级编程语言。
3.NET和C#是什么关系?
C#就是为宣传.NET而创立的,它直接集成于Visual Studio .NET中,VB也在.NET 1.0发布后对其进行支持
所以这两门语言与.NET平台耦合度很高,并且.NET上的技术大多都是以C#编程语言为示例,所以经常就.NET和C#混为一谈(实质 上它们是相辅相成的两个概念)。
ASP.NET 页面之间传递值的几种方式。
# QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。如果是传递一个或多个安全性要求不高或是 结构简单的数值时,可以使用这个方法。但是对于传递数组或对象的话,就不能用这个方法了。 #Application对象的作用范围是整个全局,也就是说对所有用户都有效。其常用的方法用Lock和UnLock。 # Session变量 想必这个肯定是大家使用中最常见的用法了,作用于用户个人,所以,过量的存储会导致服务器内存资源的耗尽。 # Cookie对象变量这个也是大家常使用的方法,与Session一样,其是什对每一个用户而言的,但是有个本质的区别,即Cookie是存放 在客户端的,而session是存放在服务器端的。而且Cookie的使用要配合ASP.NET内置对象Request来使用。 #Server.Transfer方法这个才可以说是面象对象开发所使用的方法,其使用Server.Transfer方法把流程从当前页面引导到另一个页面 中,新的页面使用前一个页面的应答流,所以这个方法是完全面象对象的,简洁有效。
C#中的委托是什么?事件是不是一种委托?
委托是一种定义方法签名的类型,可以与具有兼容签
名的任何方法关联。可以通过委托调用方法。委托用于将方法作为参数传递给其他方法。
委托的特点: 委托类似于 C++ 函数指针,但它们是类型安全的。 委托允许将方法作为参数进行传递。 委托可用于定义回调方法。 委托可以链接在一起;例如,可以对一个事件调用多个方法。 方法不必与委托签名完全匹配。 (事件是一种特殊的委托。)
override与重载的区别
重载,函数名相同,但参数类型或个数或顺序不同。其用途比如:可读性强;在构造器的时候根据参数初始化你想要的实例;代码维 护性高,重载的方法,处理逻辑的代码通常都在一个方法里,其他方法通常调用偏多。 override,是重写,字面意思,就是重写某个方法的业务逻辑。最大用途是多态,其实重载也是一种多态,但二种多态有个差别是, 重载是编译时多态,override是运行时多态
什么是装箱和拆箱?
装箱:装箱转换是指将一个值类型隐式或显式地转换成一个object类型。 拆箱:拆箱转换是指将一个对象类型显式地转换成一个值类型。
ADO.NET的五大对象
Connection (连接对象) :用于对数据库的连接操作。传入的参数为连接字符串。 Commamd (命令对象):用于执行对数据库的操作 ,传入的参数可以为连接字符串或存储过程,也必须传入连接对象的实例。 SqlDataReader (数据读取对象):用于对数据的读取操作,实例.Read()方法可以返回一个True或者False来判断是否读取到了数据, DataSet (数据集对象) :该对象类似于在内存中的多张虚拟的表,我们可以动态的添加行,列,数据,对数据库进行更新回传操 作。 SqlDataAdapter (数据适配器对象):该对象可用于数据库的增删改差操作,一次性将读取到的内容加载到内存中,可以脱离连接进 行操作,返回到一个DataSet对象
C#中值类型和引用类型分别有哪些?(以及区别)
值类型:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型。 引用类型:数组,用户定义的类、接口、委托,object,字符串。 1.值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址。 2.值类型存取速度快,引用类型存取速度慢。 3.值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用 4.值类型继承自System.ValueType,引用类型继承自System.Object 5.栈的内存分配是自动释放;而堆在.NET中会有GC来释放
字段和属性有什么区别
如果你编写一些控件给别的开发者用,而需要给他们提供“数据绑定”这种傻瓜化的机制,那么使用属性才可以做到. 属性是方法而字 段不是,当你用反射去掉用的时候,它们有各自的API。因为属性是方法,所以它可以和方法那样定义在接口中,或 者被继承和重 写,重写属性被ORM/AOP等框架用来注入代码。
抽象方法和虚方法的区别
抽象方法一定是虚方法,虚方法未必是抽象方法。虚方法是指可以被继承类重写的方法,而抽象方法是指,基类是抽象类, 没有实现它,因此必须被继承类重写的方法。
new的几种用法
除了作为创建对象实例的关键字以外,new还有个罕见的用法,就是在派生类定义一个重名的同函数签名的方法,隐藏掉基类的方法。 另外就是泛型约束定义构造函数约束的时候用。
什么叫做泛型
从编程的角度说是在定义类或者方法的时候省去具体的类型,由调用者来指定,类型+泛型类型合成得到真正的类型。 从实现机制上说,泛型是CLR在运行时动态根据泛型类型创建的匿名类型。从OO设计的角度说,泛型体现了多态性。 泛型使得程序员可以复用数据结构和算法,并且适应不同的类型,享有编译期间的强类型检查和语法提示。 一些经典的FCL提供的泛型类型和接口: List<T>、Dictionary<T1, T2>这个属于复用数据结构IComparer<T>、IEnumerable<T>这个属于复用算法
什么叫做类
就C#而言,类是对象的模板,对象是类的实例。C#是强类型语言,一切皆需要类型,除了内置的简单类型,那些其实例为引用对象 的都叫做类。C#也允许定义抽象类和密封类,以及两者的叠加——静态类,它们都无法实例化,其实这是编译器的限制,本质上它们 和一般的类没有区别,是特殊情况
.net中常用的几种页面间传递参数的方法,并说出他们的优缺点。
1.QueryString 传递一个或多个安全性要求不高或是结构简单的数值。但是对于传递数组或对象的话,就不能用这个方法了 2.session(viewstate) 简单,但易丢失 作用于用户个人,过量的存储会导致服务器内存资源的耗尽。 3.application 对象的作用范围是整个全局,也就是说对所有用户都有效。其常用的方法用Lock和UnLock 4.cookie 简单,但可能不支持,可能被伪造 Cookie是存放在客户端的,而session是存放在服务器端的。而且Cookie的使用要配合 ASP.NET内置对象Request来使用 5.input ttype="hidden" 简单,可能被伪造 6.url参数简单,显示于地址栏,长度有限
接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。
启动一个线程是用run()还是start()?
启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线 程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。
GC是什么? 为什么要有GC?
GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理
c#语言中,结构体和类的区别?
1.结构是实值类型(Value Types),而类则是引用类型(Reference Types)。 2.结构使用栈存储(Stack Allocation),而类使用堆存储(Heap Allocation)。 3.所有结构成员默认都是Public,而类的变量和常量数则默认位Private,不过其他类成员默认都是Public。 4.结构成员不能被声明位Protected,而类成员可以。
BS与CS的联系与区别
1.C/S是客户端需要安装专用的客户端软件,B/S是客户机上只要安装一个浏览器 2.C/S 一般建立在专用的网络上,C/S更强的适应范围, 3.C/S比B/S更安全。 4.C/S可以控制本机的其他程序、可以读写本地磁盘文件、可以与硬件交互。 5.B/S很难和本地硬件、程序、文件进行交互
post、get的区别
1.post的参数不会显示在浏览器地址栏中,get的参数会显示在浏览器地址栏中 2.用post可提交较大的数据量,get提交的数据量则非常小(2k) 3.用post可进行文件的提交,而用get则不可以
堆和栈的区别?
堆:一般由程序员分配释放。用new、malloc等分配内存函数分配得到的就是在堆上 栈:由编译器自动分配、释放。在函数体中定义的变量通常在栈上。
StringBuilder 和 String 的区别?
1.StringBuilder 是可扩展的,在大量字符串拼接时使用 2.String 在进行运算时会产生一个新的实例
MVC模式
MVC(Model-View-Controller)把交互系统的组成分解成模型(Model)、视图(View)、控制器(Controller)三种部件