基本概念复习
很多东西不使用,慢慢会健忘的
写这些为了自己能够记住
abstract 抽象类 与override 联合使用
定义abstract 以后,abstract的类就不能被事例化了
 /*代码示例*/
/*代码示例*/

 using System;
using System;
 using System.Collections;
using System.Collections;

 abstract class BaseClass   // Abstract class
abstract class BaseClass   // Abstract class
 {
{
 protected int _x = 100;
    protected int _x = 100;
 protected int _y = 150;
    protected int _y = 150;
 public abstract void AbstractMethod();   // Abstract method
    public abstract void AbstractMethod();   // Abstract method
 public abstract int X    { get; }
    public abstract int X    { get; }
 public abstract int Y    { get; }
    public abstract int Y    { get; }
 }
}
 abstract class ShapesClass
abstract class ShapesClass
 {
{
 abstract public int Area();
    abstract public int Area();
 }
}
 class Square : ShapesClass
class Square : ShapesClass
 {
{
 int x=10, y=11;
    int x=10, y=11;
 // Not providing an Area method results
    // Not providing an Area method results
 // in a compile-time error.
    // in a compile-time error.
 public override int Area()
    public override int Area()
 {
    {
 return x * y;
        return x * y;
 }
    }
 }
}


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

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

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


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

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

 RL();
        RL();
 }
    }
 
    
 Helper methods
    Helper methods
 }
}
 
/*virtual 与 override 联合使用 */
 using System;
using System;
 class TestOverride
class TestOverride
 {
{
 public class Employee
    public class Employee
 {
    {
 public string name;
        public string name;

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

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

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

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

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

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

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

 Console.WriteLine("Employee " + employee1.name +
        Console.WriteLine("Employee " + employee1.name + 
 " earned: " + employee1.CalculatePay());
                  " earned: " + employee1.CalculatePay());
 Console.WriteLine("Employee " + employee2.name +
        Console.WriteLine("Employee " + employee2.name + 
 " earned: " + employee2.CalculatePay());
                  " earned: " + employee2.CalculatePay());
 }
    }
 }
}
 
sealed 封装类 不能被继承
 // cs_sealed_keyword.cs
// cs_sealed_keyword.cs
 using System;
using System;
 sealed class SealedClass
sealed class SealedClass
 {
{
 public int x;
    public int x;
 public int y;
    public int y;
 }
}

 class MainClass
class MainClass
 {
{
 static void Main()
    static void Main()
 {
    {
 SealedClass sc = new SealedClass();
        SealedClass sc = new SealedClass();
 sc.x = 110;
        sc.x = 110;
 sc.y = 150;
        sc.y = 150;
 Console.WriteLine("x = {0}, y = {1}", sc.x, sc.y);
        Console.WriteLine("x = {0}, y = {1}", sc.x, sc.y);
 }
    }
 }
}
 // cs_unsafe_keyword.cs
// cs_unsafe_keyword.cs
 // compile with: /unsafe
// compile with: /unsafe
 using System;
using System;
 class UnsafeTest
class UnsafeTest
 {
{
 // Unsafe method: takes pointer to int:
    // Unsafe method: takes pointer to int:
 unsafe static void SquarePtrParam(int* p)
    unsafe static void SquarePtrParam(int* p)
 {
    {
 *p *= *p;
        *p *= *p;
 }
    }
 unsafe static void Main()
    unsafe static void Main()
 {
    {
 int i = 5;
        int i = 5;
 // Unsafe method: uses address-of operator (&):
        // Unsafe method: uses address-of operator (&):
 SquarePtrParam(&i);
        SquarePtrParam(&i);
 Console.WriteLine(i);
        Console.WriteLine(i);
 }
    }
 }
}


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

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

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

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

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

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

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

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

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



 
写这些为了自己能够记住
abstract 抽象类 与override 联合使用
定义abstract 以后,abstract的类就不能被事例化了
 /*代码示例*/
/*代码示例*/
 using System;
using System; using System.Collections;
using System.Collections;
 abstract class BaseClass   // Abstract class
abstract class BaseClass   // Abstract class {
{ protected int _x = 100;
    protected int _x = 100; protected int _y = 150;
    protected int _y = 150; public abstract void AbstractMethod();   // Abstract method
    public abstract void AbstractMethod();   // Abstract method public abstract int X    { get; }
    public abstract int X    { get; } public abstract int Y    { get; }
    public abstract int Y    { get; } }
} abstract class ShapesClass
abstract class ShapesClass {
{ abstract public int Area();
    abstract public int Area(); }
} class Square : ShapesClass
class Square : ShapesClass {
{ int x=10, y=11;
    int x=10, y=11; // Not providing an Area method results
    // Not providing an Area method results // in a compile-time error.
    // in a compile-time error. public override int Area()
    public override int Area() {
    { return x * y;
        return x * y; }
    } }
}

 class MyClass:BaseClass
class MyClass:BaseClass {
{ public override void AbstractMethod()
    public override void AbstractMethod() {
    { _x++;
        _x++; _y++;
        _y++; }
    }
 public override int X   // overriding property
    public override int X   // overriding property {
    { get
        get {
        { return _x + 10;
            return _x + 10; }
        } }
    }
 public override int Y   // overriding property
    public override int Y   // overriding property {
    { get
        get {
        { return _y + 10;
            return _y + 10; }
        } }
    }

 public static void Main()
    public static void Main() {
    { MyClass o = new MyClass();
        MyClass o = new MyClass(); o.AbstractMethod();
        o.AbstractMethod(); Console.WriteLine("x = {0}, y = {1}", o.X, o.Y);
        Console.WriteLine("x = {0}, y = {1}", o.X, o.Y);
 Square s=new Square();
        Square s=new Square(); int area=s.Area();
        int area=s.Area(); Console.WriteLine(area.ToString());
        Console.WriteLine(area.ToString()); 
         
        
 RL();
        RL(); }
    } 
     Helper methods
    Helper methods }
}
/*virtual 与 override 联合使用 */
 using System;
using System; class TestOverride
class TestOverride {
{ public class Employee
    public class Employee {
    { public string name;
        public string name;
 // Basepay is defined as protected, so that it may be
        // Basepay is defined as protected, so that it may be  // accessed only by this class and derrived classes.
        // accessed only by this class and derrived classes. protected decimal basepay;
        protected decimal basepay;
 // Constructor to set the name and basepay values.
        // Constructor to set the name and basepay values. public Employee(string name, decimal basepay)
        public Employee(string name, decimal basepay) {
        { this.name = name;
            this.name = name; this.basepay = basepay;
            this.basepay = basepay; }
        }
 // Declared virtual so it can be overridden.
        // Declared virtual so it can be overridden. public virtual decimal CalculatePay()
        public virtual decimal CalculatePay() {
        { return basepay;
            return basepay; }
        } }
    }
 // Derive a new class from Employee.
    // Derive a new class from Employee. public class SalesEmployee : Employee
    public class SalesEmployee : Employee {
    { // New field that will affect the base pay.
        // New field that will affect the base pay. private decimal salesbonus;
        private decimal salesbonus;
 // The constructor calls the base-class version, and
        // The constructor calls the base-class version, and // initializes the salesbonus field.
        // initializes the salesbonus field. public SalesEmployee(string name, decimal basepay,
        public SalesEmployee(string name, decimal basepay,  decimal salesbonus) : base(name, basepay)
                  decimal salesbonus) : base(name, basepay) {
        { this.salesbonus = salesbonus;
            this.salesbonus = salesbonus; }
        }
 // Override the CalculatePay method
        // Override the CalculatePay method  // to take bonus into account.
        // to take bonus into account. public override decimal CalculatePay()
        public override decimal CalculatePay() {
        { return basepay + salesbonus;
            return basepay + salesbonus; }
        } }
    }
 static void Main()
    static void Main() {
    { // Create some new employees.
        // Create some new employees. SalesEmployee employee1 = new SalesEmployee("Alice",
        SalesEmployee employee1 = new SalesEmployee("Alice",  1000, 500);
                      1000, 500); Employee employee2 = new Employee("Bob", 1200);
        Employee employee2 = new Employee("Bob", 1200);
 Console.WriteLine("Employee " + employee1.name +
        Console.WriteLine("Employee " + employee1.name +  " earned: " + employee1.CalculatePay());
                  " earned: " + employee1.CalculatePay()); Console.WriteLine("Employee " + employee2.name +
        Console.WriteLine("Employee " + employee2.name +  " earned: " + employee2.CalculatePay());
                  " earned: " + employee2.CalculatePay()); }
    } }
}
sealed 封装类 不能被继承
 // cs_sealed_keyword.cs
// cs_sealed_keyword.cs using System;
using System; sealed class SealedClass
sealed class SealedClass {
{ public int x;
    public int x; public int y;
    public int y; }
}
 class MainClass
class MainClass {
{ static void Main()
    static void Main() {
    { SealedClass sc = new SealedClass();
        SealedClass sc = new SealedClass(); sc.x = 110;
        sc.x = 110; sc.y = 150;
        sc.y = 150; Console.WriteLine("x = {0}, y = {1}", sc.x, sc.y);
        Console.WriteLine("x = {0}, y = {1}", sc.x, sc.y); }
    } }
}假如MyClass  是sealed的类
class MyDerivedC: MyClass {} // Error
unsafe 不安全代码
 // cs_unsafe_keyword.cs
// cs_unsafe_keyword.cs // compile with: /unsafe
// compile with: /unsafe using System;
using System; class UnsafeTest
class UnsafeTest {
{ // Unsafe method: takes pointer to int:
    // Unsafe method: takes pointer to int: unsafe static void SquarePtrParam(int* p)
    unsafe static void SquarePtrParam(int* p) {
    { *p *= *p;
        *p *= *p; }
    } unsafe static void Main()
    unsafe static void Main() {
    { int i = 5;
        int i = 5; // Unsafe method: uses address-of operator (&):
        // Unsafe method: uses address-of operator (&): SquarePtrParam(&i);
        SquarePtrParam(&i); Console.WriteLine(i);
        Console.WriteLine(i); }
    } }
}


virtual 定义的方法所在的类可以被事例化,方法可以被继承重写
 // cs_virtual_keyword.cs
// cs_virtual_keyword.cs using System;
using System; class TestClass
class TestClass {
{ public class Dimensions
    public class Dimensions {
    { public const double PI = Math.PI;
        public const double PI = Math.PI; protected double x, y;
        protected double x, y; public Dimensions()
        public Dimensions() {
        { }
        } public Dimensions(double x, double y)
        public Dimensions(double x, double y) {
        { this.x = x;
            this.x = x; this.y = y;
            this.y = y; }
        }
 public virtual double Area()
        public virtual double Area() {
        { return x * y;
            return x * y; }
        } }
    }
 public class Circle : Dimensions
    public class Circle : Dimensions {
    { public Circle(double r) : base(r, 0)
        public Circle(double r) : base(r, 0) {
        { }
        }
 public override double Area()
        public override double Area() {
        { return PI * x * x;
            return PI * x * x; }
        } }
    }
 class Sphere : Dimensions
    class Sphere : Dimensions {
    { public Sphere(double r) : base(r, 0)
        public Sphere(double r) : base(r, 0) {
        { }
        }
 public override double Area()
        public override double Area() {
        { return 4 * PI * x * x;
            return 4 * PI * x * x; }
        } }
    }
 class Cylinder : Dimensions
    class Cylinder : Dimensions {
    { public Cylinder(double r, double h) : base(r, h)
        public Cylinder(double r, double h) : base(r, h) {
        { }
        }
 public override double Area()
        public override double Area() {
        { return 2 * PI * x * x + 2 * PI * x * y;
            return 2 * PI * x * x + 2 * PI * x * y; }
        } }
    }
 static void Main()
    static void Main() {
    { double r = 3.0, h = 5.0;
        double r = 3.0, h = 5.0; Dimensions c = new Circle(r);
        Dimensions c = new Circle(r); Dimensions s = new Sphere(r);
        Dimensions s = new Sphere(r); Dimensions l = new Cylinder(r, h);
        Dimensions l = new Cylinder(r, h); // Display results:
        // Display results: Console.WriteLine("Area of Circle   = {0:F2}", c.Area());
        Console.WriteLine("Area of Circle   = {0:F2}", c.Area()); Console.WriteLine("Area of Sphere   = {0:F2}", s.Area());
        Console.WriteLine("Area of Sphere   = {0:F2}", s.Area()); Console.WriteLine("Area of Cylinder = {0:F2}", l.Area());
        Console.WriteLine("Area of Cylinder = {0:F2}", l.Area()); Console.ReadLine();
        Console.ReadLine();         }
    } }
}



 
                    
                

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号