zoukankan      html  css  js  c++  java
  • 关于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,其它的数字对应。

  • 相关阅读:
    hdu2328 Corporate Identity
    hdu1238 Substrings
    hdu4300 Clairewd’s message
    hdu3336 Count the string
    hdu2597 Simpsons’ Hidden Talents
    poj3080 Blue Jeans
    poj2752 Seek the Name, Seek the Fame
    poj2406 Power Strings
    hust1010 The Minimum Length
    hdu1358 Period
  • 原文地址:https://www.cnblogs.com/yunquan/p/4883172.html
Copyright © 2011-2022 走看看