基本概念复习

很多东西不使用,慢慢会健忘的
写这些为了自己能够记住

abstract  抽象类 与override 联合使用
定义abstract 以后,abstract的类就不能被事例化了
/*代码示例*/

using System;
using System.Collections;

abstract class BaseClass   // Abstract class
{
    
protected int _x = 100;
    
protected int _y = 150;
    
public abstract void AbstractMethod();   // Abstract method
    public abstract int X    get; }
    
public abstract int Y    get; }
}

abstract class ShapesClass
{
    
abstract public int Area();
}

class Square : ShapesClass
{
    
int x=10, y=11;
    
// Not providing an Area method results
    
// in a compile-time error.
    public override int Area()
    
{
        
return x * y;
    }

}



class MyClass:BaseClass
{
    
public override void AbstractMethod()
    
{
        _x
++;
        _y
++;
    }


    
public override int X   // overriding property
    {
        
get
        
{
            
return _x + 10;
        }

    }


    
public override int Y   // overriding property
    {
        
get
        
{
            
return _y + 10;
        }

    }



    
public static void Main()
    
{
        MyClass o 
= new MyClass();
        o.AbstractMethod();
        Console.WriteLine(
"x = {0}, y = {1}", o.X, o.Y);

        Square s
=new Square();
        
int area=s.Area();
        Console.WriteLine(area.ToString());
        
        

        RL();
    }

    
    
Helper methods
}




/*virtual  与 override 联合使用  */
using System;
class TestOverride
{
    
public class Employee
    
{
        
public string name;

        
// Basepay is defined as protected, so that it may be 
        
// accessed only by this class and derrived classes.
        protected decimal basepay;

        
// Constructor to set the name and basepay values.
        public Employee(string name, decimal basepay)
        
{
            
this.name = name;
            
this.basepay = basepay;
        }


        
// Declared virtual so it can be overridden.
        public virtual decimal CalculatePay()
        
{
            
return basepay;
        }

    }


    
// Derive a new class from Employee.
    public class SalesEmployee : Employee
    
{
        
// New field that will affect the base pay.
        private decimal salesbonus;

        
// The constructor calls the base-class version, and
        
// initializes the salesbonus field.
        public SalesEmployee(string name, decimal basepay, 
                  
decimal salesbonus) : base(name, basepay)
        
{
            
this.salesbonus = salesbonus;
        }


        
// Override the CalculatePay method 
        
// to take bonus into account.
        public override decimal CalculatePay()
        
{
            
return basepay + salesbonus;
        }

    }


    
static void Main()
    
{
        
// Create some new employees.
        SalesEmployee employee1 = new SalesEmployee("Alice"
                      
1000500);
        Employee employee2 
= new Employee("Bob"1200);

        Console.WriteLine(
"Employee " + employee1.name + 
                  
" earned: " + employee1.CalculatePay());
        Console.WriteLine(
"Employee " + employee2.name + 
                  
" earned: " + employee2.CalculatePay());
    }

}




sealed 封装类 不能被继承
// cs_sealed_keyword.cs
using System;
sealed class SealedClass
{
    
public int x;
    
public int y;
}


class MainClass
{
    
static void Main()
    
{
        SealedClass sc 
= new SealedClass();
        sc.x 
= 110;
        sc.y 
= 150;
        Console.WriteLine(
"x = {0}, y = {1}", sc.x, sc.y);
    }

}

假如MyClass  是sealed的类
class MyDerivedC: MyClass {} // Error

unsafe 不安全代码

// cs_unsafe_keyword.cs
// compile with: /unsafe
using System;
class UnsafeTest
{
    
// Unsafe method: takes pointer to int:
    unsafe static void SquarePtrParam(int* p)
    
{
        
**= *p;
    }

    
unsafe static void Main()
    
{
        
int i = 5;
        
// Unsafe method: uses address-of operator (&):
        SquarePtrParam(&i);
        Console.WriteLine(i);
    }

}




virtual  定义的方法所在的类可以被事例化,方法可以被继承重写
// cs_virtual_keyword.cs
using System;
class TestClass
{
    
public class Dimensions
    
{
        
public const double PI = Math.PI;
        
protected double x, y;
        
public Dimensions()
        
{
        }

        
public Dimensions(double x, double y)
        
{
            
this.x = x;
            
this.y = y;
        }


        
public virtual double Area()
        
{
            
return x * y;
        }

    }


    
public class Circle : Dimensions
    
{
        
public Circle(double r) : base(r, 0)
        
{
        }


        
public override double Area()
        
{
            
return PI * x * x;
        }

    }


    
class Sphere : Dimensions
    
{
        
public Sphere(double r) : base(r, 0)
        
{
        }


        
public override double Area()
        
{
            
return 4 * PI * x * x;
        }

    }


    
class Cylinder : Dimensions
    
{
        
public Cylinder(double r, double h) : base(r, h)
        
{
        }


        
public override double Area()
        
{
            
return 2 * PI * x * x + 2 * PI * x * y;
        }

    }


    
static void Main()
    
{
        
double r = 3.0, h = 5.0;
        Dimensions c 
= new Circle(r);
        Dimensions s 
= new Sphere(r);
        Dimensions l 
= new Cylinder(r, h);
        
// Display results:
        Console.WriteLine("Area of Circle   = {0:F2}", c.Area());
        Console.WriteLine(
"Area of Sphere   = {0:F2}", s.Area());
        Console.WriteLine(
"Area of Cylinder = {0:F2}", l.Area());
        Console.ReadLine();        
    }

}





posted @ 2007-03-27 16:13  jhtchina  阅读(283)  评论(0)    收藏  举报