虽然我在这里发现了一些类似的问题,但我没有找到能够帮助我解决问题的答案。 我有一个包含2个项目的解决方案(C#):P1(类库)和P2(控制台应用程序)。我确实在P2中添加了一个引用,并且在P2中也使用了语句,并且所有类都是公共的(在两个项目中)。但是,当我在P2中编写一个方法时,我需要从P1中的一个类调用一个方法,但实际上却无法做到。除了这个,我可以调用P1中任何类的所有其他方法。可能有什么问题?
以下是P1中的课程:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace P1
{
public class Song
{
private string name;
private double length;
public double Length { get { return length; } set { length = value; } }
public Song(string name, double length)
{
this.name = name;
this.length = length;
}
public Song ReadSong()
{
Console.WriteLine("Song name: ");
string songName = Console.ReadLine();
bool wrongEntry = true;
double songLength = 0;
while (wrongEntry)
{
Console.WriteLine("Song length: ");
string songLengthStr = Console.ReadLine();
try
{
songLength = Double.Parse(songLengthStr);
wrongEntry = false;
}
catch (FormatException)
{
Console.WriteLine("Error!");
}
}
return new Song(songName, songLength);
}
}
}
这是P2中的课程:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using P1;
namespace P2
{
public class Festival
{
private string name;
private List<Artist> listOfArtists;
public Festival(string name)
{
this.name = name;
listOfArtists = new List<Artist>();
}
public Artist ReadArtst()
{
Console.WriteLine("Artist name: ");
string artName = Console.ReadLine();
Console.WriteLine("Date of birth: ");
DateTime dat = DateTime.Parse(Console.ReadLine());
Artist art = new Artist(artName, dat);
Console.WriteLine("How many songs do you want to enter: ");
int number = Int32.Parse(Console.ReadLine());
for (int i = 0; i < number; i++)
{
}
return art;
}
static void Main(string[] args)
{
}
}
}
在for循环中的类Festival(在第二个项目中)我需要调用ReadSong()(来自Song类,这是第一个项目),但由于某种原因它无法调用。我也尝试使用其他一些方法(public void AddSong(Song newSong),它在Artist类中实现,并且可以工作)。 ReadSong()是我无法调用for循环的唯一方法。
答案 0 :(得分:1)
根据您的评论,您说您试图像这样致电ReadSong
:
art.AddSong(ReadSong());
或
art.ListOfSongs.Add(ReadSong());
但这不起作用,因为ReadSong
是Song
类的方法。
您需要首先实例化该类以在其上调用该方法,例如:
Song song = new Song(name, length);
song.ReadSong();
但是您的代码中存在更深层次的问题 - 当您调用ReadSong
方法时,Song
方法会创建{{1}}类的新实例。由于我不确定你想要实现的目标,我只能建议你花一些时间重新思考你的设计,或者对C#进行一些阅读以更好地理解它。