我可以在同一解决方案中从另一个项目访问一个项目的类和方法吗?

时间:2019-02-06 10:17:52

标签: c#

我在一个解决方案中有两个项目。第一个是ClassLibrary作为输出,第二个是WPF项目。我要从第二个项目访问的第一个项目中有一种方法,但是我不能。我告诉我该功能不存在。

我已经尝试使用“添加引用”菜单将引用添加到第二个项目。在第二个项目引用树中,第一个项目存在。 我包括了名称空间:使用firstproject;

第一个项目代码:

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

namespace ClassLibrary2
{
    public class Class1
    {
        public void displayTest()
        {
            Console.WriteLine("Hello World !");
        }

    }
}

第二个项目代码:

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using ClassLibrary2;

namespace CpowerPos
{
    /// <summary>
    /// Logique d'interaction pour MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void ButtonConnection(object sender, RoutedEventArgs e)
        {

            displayTest();
        }
    }
}

6 个答案:

答案 0 :(得分:0)

您需要先创建该类的实例,然后才能调用它。

您可以这样做:

var c1 = new Class1();
c1.displayTest();

或者您也可以将其设置为单线:

new Class1().displayTest();

答案 1 :(得分:0)

您完成了将类库项目集成到WPF应用程序所需的所有过程。

您只是错过了在Class1中创建MainWindow的实例

要在MainWindow中实例化Class1,可以使用new运算符

Class1 c1 = new Class1(); //This will create instance of class1
c1.displayTest()    //This will call display function

不要错过包括Class1的名称空间。 (即您已经在项目中完成过操作,即using ClassLibrary2;

答案 2 :(得分:0)

项目1

public static class Class1
{      
      public static void displayTest()
       {
        Console.WriteLine("Hello World !");
        }    
    }

项目2

 private void ButtonConnection(object sender, RoutedEventArgs e)
    {
        Class1.displayTest();
    }

答案 3 :(得分:0)

您需要将第一个项目dll的引用添加到第二个项目。右键单击->添加引用->选择第一个项目的dll。然后包括您要访问的第一个项目的类型名称空间。而且,您发布的代码不应首先编译,因为没有displayTest()方法是该类型的成员,它也是一个实例方法。因此,您将必须先创建Class1的实例

    private void ButtonConnection(object sender, RoutedEventArgs e)
    {
        Class1 c = new Class1();
        c.displayTest();
    } 

答案 4 :(得分:0)

您确实已经从CpowerPos内部启用了对“ ClassLibrary2”的访问。 问题在于“ Class1”和“ DisplayText”都不是静态的,因此就代码而言,它们还不存在。

您可以将“ DisplayText”设为静态,从而允许您调用“ Class1.DisplayText()”,也可以创建一个实例:

Class1 libraryClass = new Class1();
libraryClass.DisplayText();

答案 5 :(得分:0)

方法是类的一部分,因此您需要创建Class1类的实例才能调用displayTest方法。

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void ButtonConnection(object sender, RoutedEventArgs e)
        {
            var myObj = new Class1();
            myObj.displayTest();
        }
    }

或者您可以使方法静态并调用而无需创建实例。

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void ButtonConnection(object sender, RoutedEventArgs e)
        {
            Class1.displayTest();
        }
    }

另外,c#允许您访问类型的静态成员和嵌套类型,而不必使用类型名来限制访问。

using static ClassLibrary2.Class1;
public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void ButtonConnection(object sender, RoutedEventArgs e)
        {
            displayTest();
        }
    }