• 关于C#的一些小知识


    问题一 :是否可以从一个static方法内部发出对非static方法的调用?

     

    不行,
    可以这样理解
    static修饰的方法可以直接用类名调用
    非static修饰的方法必须用类new出对象才能调用
    当我们用类名直接调用时,可能这个类的对象并没有new。
    如果这时候static方法里调用非static的方法就会出现空指针异常,
    当然这种错误编译时就不会通过。

    错误代码演示:

     1  class Program
     2     {
     3 
     4         public int fact(int n)
     5         {
     6             if (n <= 1)
     7                 return 1;
     8             else
     9                 return n * fact(n-1);
    10         }
    11 
    12         static void Main(string[] args)
    13         {
    14             //利用递归来计算阶乘
    15             fact    //看到了吗?fact是根本打不出来的。
    16            
    17         }
    18     }

     正确代码演示:

     1  class Program
     2     {
     3 
     4         static int fact(int n)
     5         {
     6             if (n <= 1)
     7                 return 1;
     8             else
     9                 return n * fact(n-1);
    10         }
    11 
    12         static void Main(string[] args)
    13         {
    14             //利用递归来计算阶乘
    15             Console.WriteLine(fact(3)); 
    16            
    17         }
    18     }

    问题二:继承接口之后必须要全部继承接口里面的内容吗?

    是的,必须全部继承。

    我写一个接口:

    1 namespace 结构测试
    2 {
    3     interface Interface1
    4     {
    5         void  first();
    6         void second();
    7     }
    8 }

    我在控制台去实现这个接口的第一个方法,看看情况:

     1 namespace 结构测试
     2 {
     3     class Program:Interface1
     4     {
     5         static void Main(string[] args)
     6         {
     7 
     8         }
     9 
    10         public void first()
    11         {
    12             Console.WriteLine("我只想实现这一个方法");
    13         }
    14 
    15       
    16     }
    17 }

    运行,结果报错:

    问题三:抽象类到底是怎么用的?

    为什么要写抽象类?所谓抽象不就是把某些物体的共同特点集合起来吗?比如你可以吃饭,睡觉,学习。你的同学也可以吃饭,睡觉,学习。好了,你们都具有这些共同的特征,不只是你们,所有的人都这样,这就可以抽象出一个类--Person。那么抽象类该怎么用呢?

    抽象类Class1:

     1 namespace 抽象类
     2 { 
     3     abstract class Class1
     4     {
     5         public abstract void start(); 
     6         public  void update()
     7         {
     8             Console.WriteLine("我是抽象类里面的不抽象方法");
     9         }
    10     }
    11 }

    Class1这个抽象的类我给他写了两个方法,一个是抽象方法start,一个是非抽象方法update.注意到了没,抽象方法是不允许有方法体的。

    下面我们再来写一个普通的类Class2来继承抽象类Class1:

     1 namespace 抽象类
     2 {
     3     class Class2:Class1
     4     {
     5         public override void start()
     6         {
     7             Console.WriteLine("我继承了抽象方法");
     8         }
     9         public  void strt()
    10         {
    11             update();
    12         }  
    13     }
    14 }

    可以看到,抽象类Class1里面的抽象方法start被继承并重构了方法体,而且非抽象方法update也可以直接继承。

    下面来控制台应用程序:

     1 namespace 抽象类
     2 {
     3     class Program
     4     {
     5         static void Main(string[] args)
     6         {
     7             Class2 jj =new Class2();
     8             jj.start();
     9             jj.strt();
    10         }
    11     }
    12 }


    普通类Class2实例化了一个对象jj,然后jj可以调用start方法和strt方法。

    注意事项:抽象类不能实例化。抽象方法不能有方法体。

    问题四:string类型创建的字符串的内容是不可变的

    先上图,咱们看图说话。

    比如我最初定义了一个字符串s,初始值为 "蜀云泉" 。

    1 string s = "蜀云泉";

    我们可以看到这个字符串s的内容是存放在堆里面的,而s存放在栈里面只是起一个引用的作用。可以看到我在图上s画了一条虚线指向 “蜀云泉” 。现在我执行新的操作:

    1 s = s + "喜欢写博客";

    好了,s并没有直接在蜀云泉那块内存增加我写的字符串,而是新开辟了一块内存去重新存储。这时s指向了那块新的存储空间。而那个旧的存储空间“蜀云泉”过一段时间之后系统会自动把它清理掉。

    问题五:字符串怎么写成多行?

    有时候字符串实在是太长了,全部写在一行吧,既不美观也不方便查看,所以怎么写成多行呢?有两种方法:

    方法一:

    string Str="字符串1"+
    "字符串2";

    方法二:

    string Str=@"字符串1
                 字符串2"

    问题6:输入日期怎么判断是周几?

      int days = (int)Convert.ToDateTime("时间").DayOfWeek;

    周日是0,其它的数字对应。

  • 相关阅读:
    磁盘调度算法
    Maven 的 学习笔记
    文档结构
    变量
    进入SQL*Plus环境 (常用命令)
    PAT甲级 1050 String Subtraction (20分)(当读一行时(gets用不了))
    PAT甲级 1095 Cars on Campus (30分)(map + 排序)
    图书管理系统
    学生成绩管理系统
    磁盘调度算法
  • 原文地址:https://www.cnblogs.com/yunquan/p/4883172.html
Copyright © 2020-2023  润新知