标签:square OWIN write names 多态 应对 必须 shape src
观察上述代码,我们可以看到:在我们并未给Program类声明任何成员时,Program实例却可以通过"."操作符呼出调用列表?这是因为:我们声明的类默认继承了Object类型,它是.NET所有数据类型的基类型
如何证明Program类型的基类型是Object?
观察上述代码,我们可以看到:ToString()方法,确实定义在了Object类中;由于Program类默认继承了Object类,所以Program实例也就拥有了ToString()这个公开的函数成员。
class Program
{
static void Main(string[] args)
{
Type type = typeof(Program);
var baseType = type.BaseType;
Console.WriteLine(baseType.FullName);
Console.ReadLine();
}
}
/*输出:System.Object*/
观察上述代码,我们也可以得出Program的基类型是Object
namespace ExtendsDemo
{
class Program
{
static void Main(string[] args)
{
Square square = new Square(32.3,"红色");
Circle circle = new Circle(33.4,"蓝色");
square.ShowInfo();
circle.ShowInfo();
Console.ReadLine();
}
}
}
//先声明一个 长方形类
class Square
{
public double SquareArea { get; set; }
public string SquareColor { get; set; }
public Square(double area,string color)
{
this.SquareArea = area;
this.SquareColor = color;
}
public void ShowInfo()
{
Console.WriteLine($"面积:{this.SquareArea},颜色:{this.SquareColor}");
}
}
//然后再声明一个
class Circle
{
public double CircleArea { get; set; }
public string CircleColor { get; set; }
public Circle(double area, string color)
{
this.CircleArea = area;
this.CircleColor = color;
}
public void ShowInfo()
{
Console.WriteLine($"面积:{this.CircleArea},颜色:{this.CircleColor}");
}
}
/* 输出:
面积:32.3,颜色:红色
面积:33.4,颜色:蓝色
*/
观察上面代码,我们可以看到:Square和Circle类的相似度很高,假如说我们此时还需要一个三角形并需要得知它的面积和颜色,那么我们可能就需要"Copy"、"Paste"代码来实现了。而这种解决方式肯定是不可取的。
namespace ExtendsDemo
{
class Program
{
static void Main(string[] args)
{
Square square = new Square(32.3,"红色");
Circle circle = new Circle(33.4,"蓝色");
square.ShowInfo();
circle.ShowInfo();
Console.ReadLine();
}
}
}
class Shape
{
public double Area { get; set; }
public string Color { get; set; }
public Shape(double area)
{
}
public Shape(double area,string color)
{
this.Area = area;
this.Color = color;
}
public void ShowInfo()
{
Console.WriteLine($"面积:{this.Area},颜色:{this.Color}");
}
}
//在声明类型的后面添加":"和类型(作为基类型),便完成了类的继承
class Square : Shape
{
public Square(double area, string color) : base(area)
{
}
}
class Circle : Shape
{
public Circle(double area,string color):base(area,color)
{
}
}
我们通过改写代码,定义了一个Shape类型作为基类型,然后让Squre和Cirlcle继承Shape类,便完成了对代码的重构,当我们需要一个Trangle形状时,便可以在声明类的时候继承Shape类,快速应对需求的变动。
子类继承了父类的数据成员和函数成员(构造函数除外)--这一点从上述Square和Circle类中除构造函数外没有写声明任何成员,却能调用ShowInfo()方法可以得知。
namespace ExtendsDemo
{
class Program
{
static void Main(string[] args)
{
Square square = new Square(32.3, "红色");
square.ShowInfo();
Console.ReadLine();
}
}
}
//先声明一个 长方形类
class Shape
{
public double Area { get; set; }
public string Color { get; set; }
public Shape(double area, string color)
{
this.Area = area;
this.Color = color;
Console.WriteLine(this.GetHashCode());
}
public void ShowInfo()
{
Console.WriteLine($"面积:{this.Area},颜色:{this.Color}");
}
}
class Square : Shape
{
public Square(double area, string color) : base(area, color)
{
Console.WriteLine(base.GetHashCode() + "---" + this.GetHashCode());
}
}
/* 输出:
46104728
46104728---46104728
面积:32.3,颜色:红色
*/
那什么情况下base和this才有区别呢?这个在讲多态的时候再介绍。
class Shape
{
public double Area { get; set; }
public string Color { get; set; }
public Shape(double area, string color)
{
this.Area = area;
this.Color = color;
Console.WriteLine(this.GetHashCode());
}
public void ShowInfo()
{
Console.WriteLine($"面积:{this.Area},颜色:{this.Color}");
}
}
class Square : Shape
{
//对基类Shape的横向扩展--即子类成员越来越多了
public string Foreground { get; set; }
public Square(double area, string color) : base(area, color)
{
Console.WriteLine(base.Area + "---" + this.Area);
}
}
以上便是对类的继承的简要总结,记录下来以便以后查阅。
标签:square OWIN write names 多态 应对 必须 shape src
原文地址:https://www.cnblogs.com/bigbosscyb/p/13875307.html