ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

.NET(C#)基本理论知识

2021-06-02 11:30:17  阅读:201  来源: 互联网

标签:C# 对象 理论知识 类型 NET 方法 内存


.NET(C#)基本理论知识

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#是什么关系?

  1. C#就是为宣传.NET而创立的,它直接集成于Visual Studio .NET中,VB也在.NET 1.0发布后对其进行支持

            所以这两门语言与.NET平台耦合度很高,并且.NET上的技术大多都是以C#编程语言为示例,所以经常就.NET和C#混为一谈(实质
            上它们是相辅相成的两个概念)。
    
  2. ASP.NET 页面之间传递值的几种方式。

    # QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。如果是传递一个或多个安全性要求不高或是         
    结构简单的数值时,可以使用这个方法。但是对于传递数组或对象的话,就不能用这个方法了。
    #Application对象的作用范围是整个全局,也就是说对所有用户都有效。其常用的方法用Lock和UnLock。
    # Session变量 想必这个肯定是大家使用中最常见的用法了,作用于用户个人,所以,过量的存储会导致服务器内存资源的耗尽。
    # Cookie对象变量这个也是大家常使用的方法,与Session一样,其是什对每一个用户而言的,但是有个本质的区别,即Cookie是存放   
    在客户端的,而session是存放在服务器端的。而且Cookie的使用要配合ASP.NET内置对象Request来使用。
    #Server.Transfer方法这个才可以说是面象对象开发所使用的方法,其使用Server.Transfer方法把流程从当前页面引导到另一个页面
    中,新的页面使用前一个页面的应答流,所以这个方法是完全面象对象的,简洁有效。
    
  3. C#中的委托是什么?事件是不是一种委托?
    委托是一种定义方法签名的类型,可以与具有兼容签
    名的任何方法关联。可以通过委托调用方法。委托用于将方法作为参数传递给其他方法。

      委托的特点:
      委托类似于 C++ 函数指针,但它们是类型安全的。
      委托允许将方法作为参数进行传递。
      委托可用于定义回调方法。
      委托可以链接在一起;例如,可以对一个事件调用多个方法。
      方法不必与委托签名完全匹配。
      (事件是一种特殊的委托。)
    
  4. override与重载的区别

      重载,函数名相同,但参数类型或个数或顺序不同。其用途比如:可读性强;在构造器的时候根据参数初始化你想要的实例;代码维
      护性高,重载的方法,处理逻辑的代码通常都在一个方法里,其他方法通常调用偏多。
      
      override,是重写,字面意思,就是重写某个方法的业务逻辑。最大用途是多态,其实重载也是一种多态,但二种多态有个差别是,
      重载是编译时多态,override是运行时多态
    
  5. 什么是装箱和拆箱?

       装箱:装箱转换是指将一个值类型隐式或显式地转换成一个object类型。
       拆箱:拆箱转换是指将一个对象类型显式地转换成一个值类型。
    
  6. ADO.NET的五大对象

       Connection (连接对象) :用于对数据库的连接操作。传入的参数为连接字符串。
       Commamd (命令对象):用于执行对数据库的操作 ,传入的参数可以为连接字符串或存储过程,也必须传入连接对象的实例。
       SqlDataReader (数据读取对象):用于对数据的读取操作,实例.Read()方法可以返回一个True或者False来判断是否读取到了数据,                                
      DataSet (数据集对象) :该对象类似于在内存中的多张虚拟的表,我们可以动态的添加行,列,数据,对数据库进行更新回传操  作。
     SqlDataAdapter (数据适配器对象):该对象可用于数据库的增删改差操作,一次性将读取到的内容加载到内存中,可以脱离连接进
     行操作,返回到一个DataSet对象
    
  7. C#中值类型和引用类型分别有哪些?(以及区别)

          值类型:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型。
          引用类型:数组,用户定义的类、接口、委托,object,字符串。
          
          1.值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址。
          2.值类型存取速度快,引用类型存取速度慢。
          3.值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用
          4.值类型继承自System.ValueType,引用类型继承自System.Object
          5.栈的内存分配是自动释放;而堆在.NET中会有GC来释放
    
  8. 字段和属性有什么区别

        如果你编写一些控件给别的开发者用,而需要给他们提供“数据绑定”这种傻瓜化的机制,那么使用属性才可以做到. 属性是方法而字   
        段不是,当你用反射去掉用的时候,它们有各自的API。因为属性是方法,所以它可以和方法那样定义在接口中,或    者被继承和重
        写,重写属性被ORM/AOP等框架用来注入代码。
    
  9. 抽象方法和虚方法的区别

        抽象方法一定是虚方法,虚方法未必是抽象方法。虚方法是指可以被继承类重写的方法,而抽象方法是指,基类是抽象类,
        没有实现它,因此必须被继承类重写的方法。
    
  10. new的几种用法

    除了作为创建对象实例的关键字以外,new还有个罕见的用法,就是在派生类定义一个重名的同函数签名的方法,隐藏掉基类的方法。   
    另外就是泛型约束定义构造函数约束的时候用。
    
  11. 什么叫做泛型

      从编程的角度说是在定义类或者方法的时候省去具体的类型,由调用者来指定,类型+泛型类型合成得到真正的类型。
      从实现机制上说,泛型是CLR在运行时动态根据泛型类型创建的匿名类型。从OO设计的角度说,泛型体现了多态性。
      泛型使得程序员可以复用数据结构和算法,并且适应不同的类型,享有编译期间的强类型检查和语法提示。
      一些经典的FCL提供的泛型类型和接口:   List<T>、Dictionary<T1, T2>这个属于复用数据结构IComparer<T>、IEnumerable<T>这个属于复用算法
    
  12. 什么叫做类

      就C#而言,类是对象的模板,对象是类的实例。C#是强类型语言,一切皆需要类型,除了内置的简单类型,那些其实例为引用对象   
      的都叫做类。C#也允许定义抽象类和密封类,以及两者的叠加——静态类,它们都无法实例化,其实这是编译器的限制,本质上它们
      和一般的类没有区别,是特殊情况
    
  13. .net中常用的几种页面间传递参数的方法,并说出他们的优缺点。

       1.QueryString  传递一个或多个安全性要求不高或是结构简单的数值。但是对于传递数组或对象的话,就不能用这个方法了 
       2.session(viewstate) 简单,但易丢失 作用于用户个人,过量的存储会导致服务器内存资源的耗尽。  
       3.application 对象的作用范围是整个全局,也就是说对所有用户都有效。其常用的方法用Lock和UnLock 
       4.cookie 简单,但可能不支持,可能被伪造 Cookie是存放在客户端的,而session是存放在服务器端的。而且Cookie的使用要配合
        ASP.NET内置对象Request来使用 
       5.input ttype="hidden" 简单,可能被伪造 
       6.url参数简单,显示于地址栏,长度有限 
    
  14. 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

       接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。
    
  15. 启动一个线程是用run()还是start()?

    启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线 
    程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。
    
  16. GC是什么? 为什么要有GC?

    GC是垃圾收集器。程序员不用担心内存管理,因为垃圾收集器会自动进行管理
    
  17. c#语言中,结构体和类的区别?

    1.结构是实值类型(Value Types),而类则是引用类型(Reference Types)。
    2.结构使用栈存储(Stack Allocation),而类使用堆存储(Heap Allocation)。
    3.所有结构成员默认都是Public,而类的变量和常量数则默认位Private,不过其他类成员默认都是Public。
    4.结构成员不能被声明位Protected,而类成员可以。
    
  18. BS与CS的联系与区别

         1.C/S是客户端需要安装专用的客户端软件,B/S是客户机上只要安装一个浏览器
         2.C/S 一般建立在专用的网络上,C/S更强的适应范围,
         3.C/S比B/S更安全。
         4.C/S可以控制本机的其他程序、可以读写本地磁盘文件、可以与硬件交互。
         5.B/S很难和本地硬件、程序、文件进行交互
    
  19. post、get的区别

        1.post的参数不会显示在浏览器地址栏中,get的参数会显示在浏览器地址栏中
        2.用post可提交较大的数据量,get提交的数据量则非常小(2k)
        3.用post可进行文件的提交,而用get则不可以
    
  20. 堆和栈的区别?

      堆:一般由程序员分配释放。用new、malloc等分配内存函数分配得到的就是在堆上
      栈:由编译器自动分配、释放。在函数体中定义的变量通常在栈上。
    
  21. StringBuilder 和 String 的区别?

     1.StringBuilder 是可扩展的,在大量字符串拼接时使用
     2.String 在进行运算时会产生一个新的实例
    
  22. MVC模式

      MVC(Model-View-Controller)把交互系统的组成分解成模型(Model)、视图(View)、控制器(Controller)三种部件
    

标签:C#,对象,理论知识,类型,NET,方法,内存
来源: https://blog.csdn.net/PML97402/article/details/117461483

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有