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,所用实例属于什么类,就调用所在类的相关函数。

  • 相关阅读:
    HTML5全屏API在FireFox/Chrome中的显示差异(转)
    过程需要参数 '@statement' 为 'ntext/nchar/nvarchar'
    程序员面试zhongdian
    select into #T from ,insert into #T select ,insert into #T exec
    Log4Net Layout使用以及扩展
    jdbc报java.lang.ClassNotFoundException: com.mysql.jdbc.Drive
    eclipse的maven项目中找不到Maven Dependencies
    elfinder中通过DirectoryStream.Filter实现筛选隐藏目录(二)
    一个好用的字符过滤,差异匹配补丁的扩展库,各语言版本
    java调用c/c++代码简单实现以及遇见的坑
  • 原文地址:https://www.cnblogs.com/wh-tju/p/4384308.html
Copyright © 2011-2022 走看看