【问题标题】:Can't call C# function from other .cs file无法从其他 .cs 文件调用 C# 函数
【发布时间】:2018-05-24 21:19:22
【问题描述】:

我真的坚持将我的函数 InlogLeerling() 从 .cs 文件 Login.cs 调用到 MainPage.xaml.cs

我确实尝试了所有方法,并且已经找到了一些答案,但我不明白如何让它在我的项目中发挥作用。当我调用函数InlogLeerling() 时,我收到错误There is no argument given that corresponds to the required formal parameter 'mainpage' of 'Login.InlogLeerling(MainPage)'

这是我在 Login.cs 中使用的代码

namespace VerlofXamarin.Logical_Layer
{
    public class Login
    {
        public string pu_Gebruikersnaam, pu_Wachtwoord, pu_LogLeerling;

        string Gebruikersnaam
        {
            get { return pu_Gebruikersnaam; }
            set { pu_Gebruikersnaam = value; }
        }

        string Wachtwoord
        {
            get { return pu_Wachtwoord; }
            set { pu_Wachtwoord = value; }
        }

        public MainPage mainpage;

        private void InlogLeerling(MainPage mainpage)
        {
            Data_Layer.Verbinding vv = new Data_Layer.Verbinding();

            this.mainpage = mainpage;
            try
            {
                if(string.IsNullOrEmpty(pu_Gebruikersnaam) == true || string.IsNullOrEmpty(pu_Wachtwoord) == true)
                {
                    mainpage.pu_LeerlingLog = "Vul gebruikersnaam en wachtwoord in!";
                    return;
                }

                vv.con.Open();
                MySql.Data.MySqlClient.MySqlCommand cmd = new MySql.Data.MySqlClient.MySqlCommand("SELECT leerlinggebruikersnaam, leerlingwachtwoord FROM arabignl_project.myfirstmodule$leerlinglogin WHERE (leerlinggebruikersnaam = @gebruiker AND leerlingwachtwoord = @wachtwoord)", vv.con);
                cmd.Parameters.AddWithValue("@gebruiker", pu_Gebruikersnaam.ToString());
                cmd.Parameters.AddWithValue("@wachtwoord", pu_Wachtwoord.ToString());

                MySqlDataReader reader = cmd.ExecuteReader();

                if (reader.HasRows)
                {
                    while (reader.Read())
                    {
                        mainpage.pu_LeerlingLog = "Inloggen gelukt";
                    }
                }
                else
                {
                    mainpage.pu_LeerlingLog = "Inloggen mislukt";
                }
                reader.Close();
            }
            catch (MySqlException ex)
            {
                mainpage.pu_LeerlingLog = ex.ToString();
            }
            finally
            {
                vv.con.Close();
            }
        }

    }
}

还有MainPage.xaml.cs

namespace VerlofXamarin
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }

        public Login login;

        public string pu_LeerlingLog
        {
            get { return LoginLog.Text; }
            set { LoginLog.Text = value; }
        }

        public string pu_LeerlingGebruikersnaam
        {
            get { return LeerlingGebruikersnaam.Text; }
        }

        public string pu_LeerlingWachtwoord
        {
            get { return LeerlingWachtwoord.Text; }
        }

        public void LoginKlik(Login login)
        {
            this.login = login;
            login.InlogLeerling();
        }

我已经尝试了很多东西。

【问题讨论】:

    标签: c# asp.net wpf xaml oop


    【解决方案1】:

    您的代码中有两个问题。

    1. 您不能从课堂外呼叫任何私人成员。所以公开你的方法
    2. 您的方法需要MainPage 类型的参数。所以你必须提供它,这正是你的错误状态:

      public void LoginKlik(Login login)
      {
          this.login = login;
          login.InlogLeerling(this);
      }
      

    除了那些你不应该公开暴露一个领域。而是使用一个公共属性,您可以在课堂内修改在课堂外阅读Login:

    public MainPage MainPage { get; private set; }
    

    【讨论】:

      【解决方案2】:

      您将无法调用该方法,因为它们不在同一个类中。 当您提供 privte 访问修饰符时,只能在类中进行访问。 如果您想提供更多访问权限,可以:

      protected - 受保护的成员可在其类内和派生类实例中访问。

      内部- 内部类型或成员只能在同一程序集中的文件中访问。(即同一编译程序)

      公开-。公共访问是最宽松的访问级别。没有限制

      因此,通过使用 internal 或 public(取决于您在更大方面的需要),您将能够在项目的其他类中访问此方法

      【讨论】:

        【解决方案3】:

        你应该学习访问修饰符。使用私有,其他类无法访问它。因此,您可以将其更改为内部或公共。这里是参考 - https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/access-modifiers

            internal void InlogLeerling(MainPage mainpage)
        

        【讨论】:

          猜你喜欢
          • 2011-05-24
          • 2011-10-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多