using System;
public enum Direction { Right, Left, Forward };
class Chaharpa
{
private int age;
private int height;
private int cordinates_x;
private int cordinates_y;
public Chaharpa(int a, int b, int x, int y)
{
age = a;
height = b;
cordinates_x = x;
cordinates_y = y;
}
public Chaharpa(int c, int d)
{
age = c;
height = d;
cordinates_x = 0;
cordinates_y = 0;
}
public int Age
{
get { return age; }
}
public int Height
{
get { return height; }
}
public int Cordinates_x
{
get { return cordinates_x; }
set { cordinates_x = value; }
}
public int Cordinates_y
{
get { return cordinates_y; }
set { if (value > 0) cordinates_y = value; }
}
public void Move(Direction direction)
{
if (direction == Direction.Forward)
Cordinates_y++;
else if (direction == Direction.Right)
Cordinates_x++;
else if (direction == Direction.Left)
Cordinates_x--;
}
class horse : Chaharpa
{
public bool is_wild;
public void Jump(int x)
{
x = Cordinates_y;
Cordinates_y += 5;
}
public void Print()
{
Console.WriteLine("Horse Information: Age," + Age + ", Height: " + Height + ", Wild: " + is_wild + ", X: " + Cordinates_x + ", Y: " + Cordinates_y);
}
}
}
class Program
{
static void Main(string[] args)
{
int age, x, y, minAge = 0;
int height;
bool wild;
for (int i = 0; i < 3; i++)
{
Console.WriteLine("Horse #" + (i + 1));
Console.Write("Enter Age: ");
age = int.Parse(Console.ReadLine());
Console.Write("Enter Height: ");
height = int.Parse(Console.ReadLine());
Console.Write("Enter X: ");
x = int.Parse(Console.ReadLine());
Console.Write("Enter Y: ");
y = int.Parse(Console.ReadLine());
Console.Write("Is Wild: ");
wild = bool.Parse(Console.ReadLine());
minAge = age;
if (minAge > age)
{
minAge = age;
}
}
Console.WriteLine();
horse ob = new horse();
ob.Jump(minAge);
ob.move();
ob.Print();
Console.ReadKey();
}
}
我在Visual Studio中收到这些错误:
'Chaharpa'不包含带有0个参数的构造函数
找不到类型或名称空间名称“马”(您是否缺少using指令或程序集引用?)
找不到类型或名称空间名称“马”(您是否缺少using指令或程序集引用?)
答案 0 :(得分:0)
在类Chaharpa
中,您定义了两个构造函数,它们都带有参数。
创建自己的构造函数将覆盖默认构造函数。
通常,从基类继承时,您想使用用于初始化基类的参数来初始化继承类,请查看此thread。
horse
和Chaharpa
类中的Chaharpa
类不是公共的。
将类horse
和Chaharpa
更改为public并以以下方式访问它:
Chaharpa.horse ob = new Chaharpa.horse();
是正确的方法。
以下是该代码的一些缓解措施:
using System;
using System.ComponentModel;
public enum Direction
{ Right, Left, Forward };
public class Chaharpa
{
private int age;
private int height;
private int cordinates_x;
private int cordinates_y;
public Chaharpa()
{
}
public Chaharpa(int a, int b, int x, int y)
{
age = a;
height = b;
cordinates_x = x;
cordinates_y = y;
}
public Chaharpa(int c, int d)
{
age = c;
height = d;
cordinates_x = 0;
cordinates_y = 0;
}
public int Age
{
get { return age; }
}
public int Height
{
get { return height; }
}
public int Cordinates_x
{
get { return cordinates_x; }
set { cordinates_x = value; }
}
public int Cordinates_y
{
get { return cordinates_y; }
set { if (value > 0) cordinates_y = value; }
}
public void Move(Direction direction)
{
if (direction == Direction.Forward)
Cordinates_y++;
else if (direction == Direction.Right)
Cordinates_x++;
else if (direction == Direction.Left)
Cordinates_x--;
}
public class horse : Chaharpa
{
public bool is_wild;
public void Jump(int x)
{
x = Cordinates_y;
Cordinates_y += 5;
}
public void move()
{
throw new NotImplementedException();
}
public void Print()
{
Console.WriteLine("Horse Information: Age," + Age + ", Height: " + Height + ", Wild: " + is_wild + ", X: " + Cordinates_x + ", Y: " + Cordinates_y);
}
}
}
class Program
{
static void Main(string[] args)
{
int age, x, y, minAge = 0;
int height;
bool wild;
for (int i = 0; i < 3; i++)
{
Console.WriteLine("Horse #" + (i + 1));
Console.Write("Enter Age: ");
age = int.Parse(Console.ReadLine());
Console.Write("Enter Height: ");
height = int.Parse(Console.ReadLine());
Console.Write("Enter X: ");
x = int.Parse(Console.ReadLine());
Console.Write("Enter Y: ");
y = int.Parse(Console.ReadLine());
Console.Write("Is Wild: ");
wild = bool.Parse(Console.ReadLine());
minAge = age;
if (minAge > age)
{
minAge = age;
}
}
Console.WriteLine();
Chaharpa.horse ob = new Chaharpa.horse();
ob.Jump(minAge);
// You can call the Move defined in Chaharpa
ob.Move(<PASS DIRECTION PARAMETER HERE>);
ob.Print();
Console.ReadKey();
}
}
答案 1 :(得分:0)
首先,您必须研究有关C#中对象创建的更多信息。在子类构造函数中创建子类的对象时,它正在调用基类构造函数。
using System;
public class Program
{
public static void Main()
{
Child child = new Child();
}
}
public class Parent{
public Parent(){
Console.WriteLine("I am parent");
}
}
public class Child : Parent {
public Child(){
Console.WriteLine("I am child");
}
}
输出
I am parent
I am child
创建类时,有一个默认的构造函数(该构造函数带有0个参数)。但是,当您创建另一个构造函数(接受多个参数)时,默认构造函数将替换为该构造函数。您必须手动创建默认构造函数。因此,在运行时,它试图调用基类构造函数的默认构造函数。但是既然消失了,就会发生此错误。
然后,您必须研究C#中的嵌套类。
您不能仅仅通过内部名称来调用内部类。您必须从外部类中引用它。
using System;
public class Program
{
public static void Main()
{
Outer.Inner child = new Outer.Inner();
}
}
public class Outer{
public Outer(){
Console.WriteLine("I am outer");
}
public class Inner : Outer {
public Inner(){
Console.WriteLine("I am inner");
}
}
}
输出
I am outer
I am inner
这就是为什么出现错误The type or namespace name 'horse' could not be found (are you missing a using directive or an assembly reference?)
此代码将起作用。
using System;
public enum Direction
{ Right, Left,Forward};
class Chaharpa
{
private int age;
private int height;
private int cordinates_x;
private int cordinates_y;
public Chaharpa(){}
public Chaharpa(int a, int b, int x, int y)
{
age = a;
height = b;
cordinates_x = x;
cordinates_y = y;
}
public Chaharpa(int c, int d)
{
age = c;
height = d;
cordinates_x = 0;
cordinates_y = 0;
}
public int Age
{
get{ return age; }
}
public int Height
{
get{ return height;}
}
public int Cordinates_x
{
get{ return cordinates_x;}
set{ cordinates_x = value;}
}
public int Cordinates_y
{
get{return cordinates_y;}
set{ if (value > 0)cordinates_y = value;}
}
public void Move(Direction direction)
{
if (direction == Direction.Forward)
Cordinates_y++;
else if (direction == Direction.Right)
Cordinates_x++;
else if (direction == Direction.Left)
Cordinates_x--;
}
public class horse : Chaharpa
{
public bool is_wild;
public void Jump(int x)
{
x = Cordinates_y;
Cordinates_y += 5;
}
public void Print()
{
Console.WriteLine("Horse Information: Age," + Age + ", Height: " + Height + ", Wild: " + is_wild + ", X: " + Cordinates_x + ", Y: " + Cordinates_y);
}
}
}
public class Program
{
public static void Main(string[] args)
{
int age, x, y, minAge = 0;
int height;
bool wild;
for (int i = 0; i < 3; i++)
{
Console.WriteLine("Horse #" + (i + 1));
Console.Write("Enter Age: ");
age = int.Parse(Console.ReadLine());
Console.Write("Enter Height: ");
height = int.Parse(Console.ReadLine());
Console.Write("Enter X: ");
x = int.Parse(Console.ReadLine());
Console.Write("Enter Y: ");
y = int.Parse(Console.ReadLine());
Console.Write("Is Wild: ");
wild = bool.Parse(Console.ReadLine());
minAge = age;
if (minAge > age)
{
minAge = age;
}
}
Console.WriteLine();
Chaharpa.horse ob = new Chaharpa.horse();
ob.Jump(minAge);
ob.Print();
}
}
对一个班级使用一个文件是一个好习惯。