【发布时间】:2015-03-19 01:38:38
【问题描述】:
我只是在使用 Microsoft Virtual Academy 学习 C#。这是我正在使用的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Variables
{
class Program
{
static void Main(string[] args)
{
Car myCar = new Car("BWM", "745li", "Blue", 2006);
printVehicleDetails(myCar);
Console.ReadLine();
}
}
abstract class Vehicle
{
public string Make { get; set; }
public string Model { get; set; }
public int Year { get; set; }
public string Color { get; set; }
public abstract string FormatMe();
public static void printVehicleDetails(Vehicle vehicle)
{
Console.Writeline("Here are the vehicle's details: {0}", vehicle.FormatMe());
}
}
class Car : Vehicle
{
public Car(string make, string model, string color, int year)
{
Make = make;
Model = model
Color = color;
Year = year;
}
public override string FormatMe()
{
return string.Format("{0} - {1} - {2} - {3}",
this.Make,
this.Model,
this.Color,
this.year);
}
}
无论如何,我遇到的问题源于printVehicleDetails(myCar)。当我尝试构建项目时,我收到错误“当前上下文中不存在名称‘printVehicleDetails’。
我可以通过将行更改为Vehicle.printVechicleDetails(myCar) 来修复错误。
有谁知道为什么我必须在该行中包含Vehicle?
【问题讨论】:
-
因为它是 C# 标准所要求的?编译器怎么知道你指的是哪个方法?
-
您在一个名为
Program的类中调用它,但该方法是Vehicle类中的静态方法。您如何期望它知道在哪里可以找到该方法?真正的问题是,为什么要将它作为静态方法而不是实例方法? -
@walther 我是 C# 和所有 OOP 的新手,我怎么知道这个?
-
@MattBurland 我正在关注 MVA 上的“绝对初学者的 C# 基础”。重新观看视频后,看起来 PrintVehicleDetails 应该是 Program 中的函数,而不是 Vehicle 中的函数。
-
@JPetersen:这样会更有意义。
标签: c#