zoukankan      html  css  js  c++  java
  • c#课后小试3

    1.静态类

    静态类不能实例化。
    静态类是密封的(sealed)不能从它派生(derive)类型。
    静态类不能包含非静态成员也不能有构造方法。
    C#中没有全局方法,我们可以用静态类储存一些想用的数据。
    static class Sclass
    {
       一些我们需要的静态数据
      static A()
      {
           ……
      }
    }
     
    在主函数中,我门可以这样使用
    Sclass.A();
     
    2.析构函数
    如果对象要控制非托管(unmanaged)的资源,用完后要显式地(explicitly)释放托管的资源,这时需要析构方法。
    如果只有托管(managed)引用,就不需要实现析构方法(destructor)。
    与c++中一样,本身存在一个默认的,在使用完后帮你删除类。如果自己想在删除的同时进行一些其他操作,我们可以重写析构函数。
    ~className()
    {
       ………
    }
     
    下图为我在用继承时使用了析构函数。
    代码为

    namespace ConsoleApplication2
    {
        class Program
        {


            public class myClassA
            {
                int shuju;
                public myClassA()
                {
                    shuju = 0;
                    Console.WriteLine("调用构造函数A");
                }

                ~myClassA()
                {
                    Console.WriteLine("调用析构函数A");
                }
            }
            public class myClassB :myClassA
            {
                int shuju;
                public myClassB(int q)
                {
                    shuju = q;
                    Console.WriteLine("调用构造函数B");
                }

                ~myClassB()
                {
                    Console.WriteLine("调用析构函数B");
                }

            }
            static void Main(string[] args)
            {
               
                myClassB b = new myClassB(5);
              
              
              
            }
           
        }
       
    }

    结果为

    同时了解到继承时自上而下,析构时自下而上。

    3.参数传递

    传递参数时,与c++类似,有值传递和引用传递。传递时什么都不加,为值传递,实际的数据并未改变。引用传递与c++不同,参数前加ref,out.其中out不用初始化数据。

    public void GetTime(int h, ref int m, out int s )

     {

          h = 12;

          m = 34;

          s = 56;

     }

    …h1=0;m1=0;

        GetTime(h1, ref m1, out s1 );

    … h1=0;m1=34;s1=56;

    4.封装

    用以下代码尝试

     class Program
        {


            public class myClass
            {
                private int myProperty ;
               public myClass(int q)
                {
                    myProperty = q;
                }
               public int MYPROPERTY
                {
                    get { return this.myProperty; } 
                    set { this.myProperty = value; }

                }

              
            }
           
            static void Main(string[] args)
            {

                myClass a=new myClass(1);
                Console.WriteLine(a.MYPROPERTY);
                a.MYPROPERTY = 8;
                Console.WriteLine(a.MYPROPERTY);
                Console.Read();
              
              
            }
           
        }

    结果 1

           8

    可以看出,封装成功。成功的用poperty调用修改private类型的数据。

    5.继承和多态

    与c++中有区别,首先是在子类重写函数时要在函数名前加 override.

    另外,c#中有new的问题。

    存在new时,如果所用实例是new对应类的类型,则调用该类父类的相关函数。

    对于override,所用实例属于什么类,就调用所在类的相关函数。

  • 相关阅读:
    Java实现 LeetCode 30 串联所有单词的子串
    Java实现 LeetCode 29 两数相除
    Java实现 LeetCode 29 两数相除
    Java实现 LeetCode 29 两数相除
    Java实现 LeetCode 28 实现strStr()
    Java实现 LeetCode 28 实现strStr()
    Java实现 LeetCode 28 实现strStr()
    Java实现 LeetCode 27 移除元素
    Java实现 LeetCode 27 移除元素
    字符编码终极笔记:ASCII、Unicode、UTF-8、UTF-16、UCS、BOM、Endian
  • 原文地址:https://www.cnblogs.com/wh-tju/p/4384308.html
Copyright © 2011-2022 走看看