zoukankan      html  css  js  c++  java
  • C#初级知识点整理及VS的简单使用

    C#预处理器指令
    #define #undef 声明一个不需赋值的变量
    注意的一点事它必须放到using 上面,如

    #define TEST
    using System.xxx;
    public class Task
    {
        public Task()
        {
        }
    }

    #region #endregion
    这是一组用来帮助管理代码布局的指令

    #if #else #elif #endif
    if else 没什么好说的。不过这个一般要跟#define搭配使用

    #warn #error
    输出警告或错误

    #if DEBUG

    #endif

    这个比较有用,指定了一个只在调试的时候才执行的代码块,发布的时候会被自动删除

    当然 这些功能都可以用一组快捷键来实现:  CTRL + K ,CTRL + S

    选中一段代码然后使用这组快捷键就可以


    ref参数

    当把一个参数传给一个方法的时候,如果这个参数是传送的值,那么无论在方法中它被如何更改都不会影响方法外的原值;但如果加上ref的话,这个值就会被作为引用传递

    static void Reset(ref int b)
    {
        b = 1;
    }
    
    static void Main(string[] args)
    {
        int n = 0;
        Reset(ref n);
    }

    注意的是,定义和使用方法的时候,形参和实参前都要加ref


    可选参数

    有的时候某些参数是可选的,并且有默认值。(有点像重载)

    static void Reset(int b,int c = 2,int d=3)
    {
        Console.WriteLine("n:{0}", b+c+d);
    }
    
    static void Main(string[] args)
    {
        Reset(1);
    }

    但要注意的是可选参数必须放到最后定义。下面这样是不对的

    static void Reset(int c = 2,int d=3,int b)
    {
        Console.WriteLine("n:{0}", b+c+d);
    }

    调用的时候 是按顺序赋值。

    Reset(119);//给b赋值
    Reset(119,5);//给b,c赋值
    Reset(119,5,7);//给b,c,d赋值

    但如果不想按顺序赋值,或者有些参数不想赋值则可以用以下方式调用

    Reset(110,d:5);//给b,d赋值

     属性的概念

    public class Person
    {
        private string name;
        
        public string Name
        {
            set
            {
                name = value;
            }
            get
            {
                return name;
            }
        }
    }

    如果不添加set访问器的话,就成了只读属性。(相应的也有只写属性)

    public class Person
    {
        private string name;
        public string Name
        {
            get
            {
                return name;
            }
        }
    }

    这还有种简单的写法

    public class Person
    {
        public string Name{set;get;}
    }

    但这种自动实现的属性必须有两个访问器。否则会出错,如下面这样

    public class Person
    {
        public string Name{get;}
    }

    如果想设置只读的话,可以通过改变访问权限的方式实现:

    public class Person
    {
        public string Name
        {
            private set;
            get;
        }
    }

     继承

     ①在C#中 子类调用父类要用base,

    public class Student:Person
    {
        public override void ShowName()
        {
            base.ShowName();
        }
    }

    这就如同Java中的super一样。

    ②对于父类的方法,如果想将来可以被覆盖的话,必须显式的将函数声明为virtual,而子类覆盖该方法的时候也必须声明为override。这是因为在C#中方法默认都是虚方法。这跟Java是截然不同的。

    ③抽象类

    如果某个类是抽象的话,那么该类中的方法也都必须是抽象的;相反,如果某个方法是抽象的话,该类也必须是抽象类。

    这个抽象关键字与Java中相同,都是abstract。注意的是抽象方法声明为abstract而不能加virtual

    ④密封类

    将类声明为sealed意味着该类无法被其他类所继承。这个的用处参照类string

    ⑤关键字internal

    带有internal的类或属性方法只有在同一个程序集(命名空间)下的程序才能获得,等同于Java下的default


    VS2010中比较有用的快捷键

    • 定位搜索

    编辑(Edit)菜单中选择“Navigate To”(定位到) 或者通过Ctrl+, 打开定位搜索窗口。在搜索栏(模糊查询的功能很强)中输入查询内容,VS2010 将列出相关结果信息。

    双击搜索结果可到达代码位置。

    • 调用层次结构

    在方法、属性、构造函数上点击鼠标右键可查看调用层次结构,如果是刚接手的项目就可以用这个方法了解其相关程序结构。

    • 查看引用情况

     Ctrl + K + R 可查看方法、属性、构造函数的引用情况,代码重构和了解代码结构的利器


    VS的WCF测试工具

    路径 Microsoft Visual Studio XX.0Common7IDEWcfTestClient.exe

    还有一个第三方的服务测试工具 SoapUI 用法类似


    页面错误事件监听

     网页出错误再说难免,后台错误处理不够谨慎,数据格式判断不够全面,都有可能出现。但是这些东西不能让用户看到,即使是拿个委婉点的Sorry Page来糊弄也可以。

    为了解决这个问题,我们可以覆盖Page的OnError事件(当后台处错误的时候都会进入该事件),并作出相应处理 一般是跳转到某个指定页面

    protected override void OnError(EventArgs e)
    {
        Response.Redirect("Sorry.htm");
    }

  • 相关阅读:
    (floyd+DP) zoj 3027
    (树形DP) acdream 1028
    acdream 1032
    (BFS) acdream 1191
    (树形DP) bzoj 1060
    (状态压缩DP) poj 2978
    (DP) codeforces 358D
    (DP+二分) hdu 3433
    (最大生成树) hdu 3367
    hdoj 3501
  • 原文地址:https://www.cnblogs.com/TiestoRay/p/3395383.html
Copyright © 2011-2022 走看看