草庐IT

C#面向对象程序设计课程实验五:实验名称:C#面向对象技术

编程爱好者-阿新 2025-05-11 原文

C#面向对象程序设计课程实验五:实验名称:C#面向对象技术

实验内容:C#面向对象技术

一、 实验目的及要求

  • (1)掌握类的继承特性;
  • (2)学会使用 C#实现类的继承性;
  • (3) 理解类的多态特性;
  • (4)学会使用 C#的方法重写;

二、实验环境

Microsoft Visual Studio 2008

三、实验内容与步骤

3.1、实验内容:测试类,实现多态

实验内容:测试类,实现多态的内容如下所示

定义一个名为 Vehicles 的基类,代表交通工具。该类中应包含 string 类型的属性 Brand 表示商标,Color 表示颜色。还应包含 Run(行驶,在控制台显示“我已经开动了”)和虚 方法 ShowInfo(显示信息,在控制台显示商标和颜色),并编写构造方法初始化其属性。 编写 Car(小汽车)类继承于 Vehicles 类,增加 int 型属性 Seats(座位),还应重写成员方法 ShowInfo(在控制台显示小汽车的信息),并编写构造方法。编写 Truck(卡车)类继承于 Vehicles 类,增加 float 型成员属性 Load(重载),还应重写成员方法 ShowInfo(在控制台 显示卡车的信息),并编写构造方法。在 Main 方法中测试以上各类,实现多态。

3.2、实验步骤

3.2.1、实验程序

1、 实验的程序如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 实验五_1_
{
    class Vehicles
    {
        private string Brand;            //字段
        private string Color;

        public Vehicles(string brand, string color)     //构造函数
        {
            Brand = brand;
            Color = color;
        }

        public Vehicles() 
        {
        }

        public void Run()
        {
            Console.WriteLine("我已经开动了");
        }

        public virtual void ShowInfo()   //虚方法
        {
            Console.WriteLine("商标: {0},颜色:  {1}", Brand, Color);
        }
    }

    class Car : Vehicles          
    {
        private int Seats;

        public Car(int seats)
        {
            Seats = seats;
        }

        public override void ShowInfo()        //重载虚方法
        {
            Console.WriteLine("座位: {0}", Seats);
        }
    }

    class Truck : Vehicles
    {
        private float Load;

        public Truck(float load)
        {
            Load = load;
        }

        public override void ShowInfo()
        {
            Console.WriteLine("载重: {0}顿", Load);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Vehicles car = new Vehicles("奔驰", "红色");
            Vehicles truck = new Vehicles("东风", "蓝色");
            Car carSeat = new Car(4);
            Truck truckLoad = new Truck(2);

            car.ShowInfo();
            truck.ShowInfo();
            carSeat.ShowInfo();
            truckLoad.ShowInfo();

            Console.ReadLine();
        }
    }
}

3.2.2、实验运行结果

2、 实验的运行结果如下:

3.3、实验内容:创建一个 Vehicle 类,并将它声明为抽象类

实验内容:创建一个 Vehicle 类,并将它声明为抽象类如下所示

创建一个 Vehicle 类,并将它声明为抽象类。在 Vehicle 类中声明一个 NumOfWheels 方法,使它返回一个字符串值。创建两个类 Car 和 Motorbike 从 Vehicle 类继承,并在这 两个类中实现 NumOfWheels 方法。在 Car 类中,应当显示“四轮车”信息,而在 Motorbike 类中应当显示“双轮车”信息。在 Main()方法中创建 Car 和 Motorbike 的实例,并在控制台中显示消息。

3.4、实验步骤

3.4.1、实验程序

1、 实验的程序如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 实验五_2_
{
    abstract class Vehicle
    {
        public virtual void NumOfWheels()   //创建虚方法
        { 
        }
    }

    class Car:Vehicle 
    {
        public override void NumOfWheels()   //重载虚方法,输出信息
        {
            Console.WriteLine("四轮车");
        }
    }

    class Motorbike : Vehicle
    {
        public override void NumOfWheels()
        {
            Console.WriteLine("双轮车");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Car car = new Car();                    //创建派生类的对象
            Motorbike motorbike = new Motorbike();
            car.NumOfWheels();                      //调用派生类的方法
            motorbike.NumOfWheels();
            Console.ReadLine();
        }
    }
}

3.4.2、实验运行结果

2、 实验的运行效果如下:

四、实验总结

  • 1、通过本次实验,自己掌握了C#的派生类、方法重写、方法多态等运用。
  • 2、掌握了类的继承特性。
  • 3、加深了对派生类继承基类的属性的概念,派生类除了拥有基类的属性外,还有自己的属性。
  • 4、第一个实验过程中出现了基类没有“0”参数的构造函数的情况。
    于是加上了语句
public Vehicles() 
{
}
  • 使基类拥有没有参数的构造函数。

有关C#面向对象程序设计课程实验五:实验名称:C#面向对象技术的更多相关文章

  1. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  2. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  3. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  4. ruby-on-rails - 按天对 Mongoid 对象进行分组 - 2

    在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev

  5. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  6. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  7. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  8. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  9. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  10. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

随机推荐