• C#知识点总结【1】


    值类型和引用类型

    从概念上看,其区别是值类型直接存储其值,引用类型存储值的引用。

    在内存当中的状态,值类型存储在堆栈(zhan)中,而引用类型存储在托管堆上。

                int i = 20;
                int j = i;

    上面的例子中 内存中会存储两个值,一个是i 一个是j;

                Vector x, y;
                x = new Vector();
                x.Value = 30;
                y = x;
                Console.WriteLine(y.Value);
                y.Value = 50;
                Console.WriteLine(x.Value);

    这段代码 内存中只存储了一个引用 Vector 而x和y 是其内部变量,所以对x的更改赋值给y,y值的也会跟着变化。

    另外引用对象可以设置为null,这样可以表示不引用任何对象;

    CTS类型

    (通用类型系统)

    预定义值类型有

    {整型:sbyte,shory,int,long,byte,ushort,uint,ulong}

    {浮点:float,double}

    {高精度浮点:decimal}

    {真假值:bool}

    {字符:char}

    预定义的引用类型

    {object,string}

    枚举

    枚举是用户定义的一组整数类型集合。

        public enum TimeOfDay
        {
            Morning = 0,
            Afternoon = 1,
            Evening = 3,
        }

    有三个有点,1.易于维护,2.代码更清晰,3.易于输入。

    C#预处理指令

    编译器是否编译此段代码的 预编译指令是 使用 #define 配合 #if #elif #else 和 #endif 使用

    #define DEBAGB
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication
    {
        class Program
        {
            static void Main(string[] args)
            {
                #if DEBAGA
                Console.WriteLine("不编译");
                #elif DEBAGB
                Console.WriteLine("编译");
                #endif
            }
        }
    }

    此时程序就不会编译 DEBAGA 代码段 只输出编译

    这样做的好处在于将来如果不想测试代码了  可以使用 #undef 讲编译代码注销掉

    #define 和 #undef 都是写在 cs 页面的顶部 才可以使用 ;

    #waring #error  是作为一条标记信息;

    #region #endregion 注释;

    #line 改变编译器在显示错误信息后的行号;

    #pragma 可以抑制或者还原制定的编译警告;

    类和结构

    类和结构内部构造相同但是区别 在于在内存当中存储的位置不同

    1.类是引用类型,存储在内存的堆中;

    2.结构是值类型,存储在内存的栈中;

    3.结构不支持继承。

    4.结构不能有无参数构造函数

    类的用途比结构的用途广,但是 较小的数据类型使用可以用结构来提高性能;

    数据成员有 字段、常量、事件;

    静态可以使用关键字static;常量关键字 const;只读字段关键字 readonly;

    函数成员有 方法、属性、构造函数、终结器(finalizer)、运算符、索引器;

    • 方法

    方法的基本用法很简单;需要注意的特别的几个点

    1.ref 关键字 是将默认传递的值类型换成 引用方式,在方法内部修改 带有ref 的参数都会改变原始对象的值;

    2.out 关键字 可以不定义默认值传递参数,也是以引用方式传递 在方法内部的更改都会影响其变化;

    3.重载 就是方法的名称相同但是方法的参数 数量不同或类型不同

    • 终结器

    终结器类似于构造函数,但是不同于构造函数,和finalize的作用相同写法不同

            /// <summary>
            /// 终结器
            /// </summary>
            ~MyClass(){
                //要清理的对象
            }
    
            /// <summary>
            /// 重写清理对象
            /// </summary>
            protected override void Finalize(){
                try 
                {            
                    //自定义清理对象
                }
                finally
                {
                    base.Finalize();
                }
            }

    匿名类型

    匿名类型就是 关键字 var ;

    关键字和new一起使用是可以创建匿名类型;

    缺点:编译器为var 伪造了一个对象的类型,所以利用反射是得不到该对象的类型的;

    结构

    类中定义了封装了对象,存储在堆中,在生存周期上有很大的灵活性,但是这也降低了性能;

    所以产生了结构,用于保存那些没有必要占用太多资源的较小数据;

    弱引用

    对于那些很大却不长访问的类,就可以使用弱引用,弱引用可以创建和使用,在垃圾回收运行是就会讲对象回收;

    因为若引用可能随时被回收,所以要使用WeakReference 类来创建;

            static void Main()
            {
                WeakReference  mathreference=new WeakReference(new Users());
                Users user;
                if(mathreference.IsAlive)
                {
                    user=mathreference.Target as Users;
                }
            }

    部分类

    当多个程序员编辑一个类的时候就可以使用这种办法来编辑一个类;

    把一个类可以分成多个部分;

    使用关键字 partial;

        partial class MyClass
        {
            public void GetOne()
            {
            
            }
        }
        partial class MyClass
        {
            public void GetTwo()
            {
            
            }
        }
    
        /// <summary>
        /// 编译后
        /// </summary>
        partial class MyClass
        {
            public void GetOne()
            {
            
            }
            public void GetTwo()
            {
            
            }
        }

    Object类

    所有.NET 的类 的派生自 System.Object 。

    GetHashCode(); 当对象在数据字典结构中,就可以使用这个方法;

    GetType();返回对象的更多信息,包括类型,方法,属性等;

    MemberwiseClone();复制对象,但是只是浅表复制,对对象内部的引用不不复制对象只是复制引用;

    扩展方法

    扩展方法是对一个类的另一个的扩展;

    扩展方法是静态的;

        public static class MyClass
        {
            public static void Add(this YouClass yc;decimal num)
            {
                yc.Value += num;
            }
        }

    名称:多罗贝勒
    博客地址:http://www.cnblogs.com/objctccc/
    欢迎转载

  • 相关阅读:
    LINQ to DataSet
    LINQ to SQL
    $.ajax()方法解析
    【转】数据库获得当前时间getdate()
    几种单例模式解析
    WebView上实现Java与JavaScript交互
    Dapper(.NET下的ORM框架)的基本使用
    IPtables中SNAT和MASQUERADE的区别
    我的桌面版fedora10安装
    我的fedora10的virtual box网络设置
  • 原文地址:https://www.cnblogs.com/objctccc/p/6120028.html
Copyright © 2020-2023  润新知