只有一种方法无法从另一个项目中调用

时间:2014-01-29 23:34:38

标签: c# methods project call

虽然我在这里发现了一些类似的问题,但我没有找到能够帮助我解决问题的答案。 我有一个包含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循环的唯一方法。

1 个答案:

答案 0 :(得分:1)

根据您的评论,您说您试图像这样致电ReadSong

art.AddSong(ReadSong());

art.ListOfSongs.Add(ReadSong());

但这不起作用,因为ReadSongSong类的方法。

您需要首先实例化该类以在其上调用该方法,例如:

Song song = new Song(name, length);
song.ReadSong();

但是您的代码中存在更深层次的问题 - 当您调用ReadSong方法时,Song方法会创建{{1}}类的新实例。由于我不确定你想要实现的目标,我只能建议你花一些时间重新思考你的设计,或者对C#进行一些阅读以更好地理解它。