举报投诉联系我们 手机版 热门标签 编程学
您的位置:编程学 > c#继承多个类 C# 继承

c#继承多个类 C# 继承

2023-02-24 22:18 C#教程

c#继承多个类 C# 继承

c#继承多个类

C#是一种面向对象的编程语言,它支持多继承,即一个子类可以从多个基类中继承属性和方法。多继承可以使子类具有多个基类的特性,从而更好地实现代码重用。

C#中的多继承是通过“:”来实现的,例如:

public class ChildClass : BaseClass1, BaseClass2 { 
    // 子类代码 
}

上面的代码表明ChildClass是BaseClass1和BaseClass2的子类,它将从这两个基类中获得特性。

C#中的多态也可以用于实施多态。例如,我们可以使用多态来创建一个函数,该函数可以接受不同子类的对象作为参数并返回不同子类的对象作为返回值。

public class BaseClass { 

    public virtual BaseClass DoSomething(BaseClass obj) { 

        // 实施逻辑 

        return obj; 

    } 
} 

 public class ChildClass : BaseClass { 

    public override BaseClass DoSomething(BaseClass obj) { 

        // 实施逻辑 

        return obj; 

    }  
} 

上面的代码表明DoSomething函数可以接受不同子类的对象作为参数并返回不同子

C# 继承

C# 继承

类可以从另一个类继承以扩展或定制原始类。

继承一个类会重用该类中的功能。

类只能从一个类继承。

例子

在这个例子中,我们首先定义一个名为Item的类:


public class Item {
   public string Name; 
} 

接下来,我们定义称为Product和DiscountProduct的类,它将从Item继承。产品和DiscountProduct获得项目的一切,加上他们定义的任何额外的成员:


public class Product : Item{ // inherits from Item 

    public long InStoreCount; 
} 
public class DiscountProduct : Item{  // inherits from Item 

    public decimal Price; 
} 

下面是我们如何使用这些类:


Product myProduct = new Product {Name="CSS",InStoreCount=1000}; 

Console.WriteLine (myProduct.Name); // CSS 
Console.WriteLine (myProduct.InStoreCount); // 1000 

以下代码使用DiscountProduct类。


DiscountProduct mansion = new DiscountProduct { Name="SQL", Price=250000 }; 
Console.WriteLine (mansion.Name);     // SQL 
Console.WriteLine (mansion.Price); // 250000 

注意

派生类Product和DiscountProduct从基类Item继承Name属性。

派生类也称为子类。基类也称为超类。

多态性

引用是多态的。

这意味着类型x的变量可以引用子类化x的对象。

例如,考虑以下方法:


public static void Display (Item i) { 
    System.Console.WriteLine (i.Name); 
} 

此方法可以显示Product和DiscountProduct,因为它们都是Items:


Product myProduct = new Product ... ; 
DiscountProduct mansion = new DiscountProduct ... ; 
Display (myProduct); 
Display (mansion); 

多态性工作,因为子类具有其基类的所有功能。

is 运算符


The <code>is</code> operator tests whether an 
object derives from a specified class or implements an interface. 

It is often used to test before downcasting. 

if (a is Product) {
   Console.WriteLine (((Product)a).InStoreCount); 
}

virtual 函数成员

标记为virtual的函数可以被希望提供特殊实现的子类覆盖。

方法,属性,索引器和事件都可以声明为virtual:


public class Item {
   public string Name;
   public virtual decimal FinalPrice { get { return 0; } } 
} 

子类通过应用覆盖修饰符覆盖虚拟方法:


public class Product : Item {
    public long InStoreCount; 
} 
public class DiscountProduct : Item {
    public decimal Price;
    public override decimal FinalPrice { 
       get { 
          return Price; 
       } 
    } 
} 

默认情况下,项目的FinalPrice为0。

Product不需要专门化此行为。

但是,DiscountProduct专门处理FinalPrice属性以返回价格的值:


DiscountProduct mansion = new DiscountProduct { Name="SQL", Price=250000 }; 
Item a = mansion; 
Console.WriteLine (mansion.FinalPrice); // 250000 
Console.WriteLine (a.FinalPrice); // 250000 

虚拟和重写方法的签名,返回类型和可访问性必须相同。

重写的方法可以通过base关键字调用其基类实现。

阅读全文
以上是编程学为你收集整理的c#继承多个类 C# 继承全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 编程学 bianchengxue.com 版权所有 联系我们
桂ICP备19012293号-7 返回底部