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

posted @ 2015-04-01 16:38  我是文小浩  阅读(125)  评论(0编辑  收藏  举报