繁体   English   中英

如何从另一个类访问我的方法

[英]How can I access my method from another class

我对c#很陌生,我几天前就开始了,所以如果它是基本的,请原谅。 我有两个表格,第一个就像一个登录页面,有人输入他们的名字。 在我的“Info.cs”类中,它通过 setter 将这个名称读取到一个变量中,而我的名为“GetCardName”的 Getter 返回这个名称。 我现在制作了一个新表单,我想通过 GetCardName getter 访问这个名称,只是不知道如何。 继承人的代码:

这是一些“info.cs”类代码:

private string CardName { get; set; } = "";
   
public string GetCardName()
{
    return this.CardName;
}

public void SetName(string name = "")
{
    this.CardName = name;
}

这是来自其他形式的代码,它只是试图调用GetCardName()

private void Form2_Load(object sender, EventArgs e)
{
    lblWelcome.Text = Info.GetCardName();
}

创建Form2时,您还需要将其引用传递给另一个表单以获取其属性。

因此,在创建和显示Form1时,您还应该创建Form2以传递该引用。 示例(未测试)代码:

var form1 = new Form1();
var form2 = new Form2(form1);
form1.Show();

Form2应该是这样的:

public class Form2
{
    private Form1 _form1;

    public Form2(Form1 form1)
    {
        _form1 = form1;
        // ... other initialization code
    }
    
    // ... other class declarations
}

一般解决方案是:您需要保留对向用户显示的Form1的引用,然后在创建时将该引用传递给Form2

你有两个选择:

  • 您可以创建要调用 EX 的类的实例: Info infoVar = new Info(); (现在您可以使用 infoVar 调用 Info.cs 类的任何方法)

  • 您可以将 Info 类设为 STATIC 类(可能不是您想要做的,但可能对未来仍有帮助)这使得可以直接调用 info 类而无需创建该类的变量,但有一些缺点。 (更多信息在这里

有几种方法可以实现您想要的:

公共静态属性

public class Info
{
    public static string CardName { get; set; } = string.Empty;
}

您可以通过以下方式直接访问它或为其设置值:

private void Form2_Load(object sender, EventArgs e)
{
    // Set
    Info.CardName = "Some name"; 
    // Get
    lblWelcome.Text = Info.CardName;
}

公共非静态属性

public class Info
{
    public string CardName { get; set; } = string.Empty;
}

您也可以直接访问它或为其设置值,但需要先创建Info类实例:

private void Form2_Load(object sender, EventArgs e)
{
    Info info = new Info();
    // Set
    info.CardName = "Some name"; 
    // Get
    lblWelcome.Text = info.CardName;
}

具有分离的公共静态 Get 和 Set 方法的私有静态字段

public class Info
{
    private static string cardName = string.Empty;

    public static string GetCardName()
    {
        return cardName;
    }

    public static void SetCardName(string name = "")
    {
        cardName = name;
    }
}

您可以在不创建Info类实例的情况下访问GetCardNameSetCardName

private void Form2_Load(object sender, EventArgs e)
{
    // Set
    Info.SetCardName("Some name"); 
    // Get
    lblWelcome.Text = Info.GetCardName();
}

具有分离的公共非静态 Get 和 Set 方法的私有非静态字段

public class Info
{
    private string cardName = string.Empty;

    public string GetCardName()
    {
        return cardName;
    }

    public void SetCardName(string name = "")
    {
        cardName = name;
    }
}

创建Info类实例后,您可以访问GetCardNameSetCardName

private void Form2_Load(object sender, EventArgs e)
{
    Info info = new Info();
    // Set
    info.SetCardName("Some name"); 
    // Get
    lblWelcome.Text = info.GetCardName();
}

字段和属性之间的区别在这里很好地解释了:字段和属性之间有什么区别? . 简而言之,属性是字段的“包装器”,通常是private的,您无法直接访问或修改它们。 它是成员设计指南的一部分。 属性还允许通过属性设置器添加一些验证,以确保有效值存储在cardName字段中,例如:

public class Info
{
    private string cardName = string.Empty;
    public string CardName
    {
        get => cardName;
        set 
        {
            // Check that value you trying to set isn't null
            if (value != null)
                cardName = value;
            // Or check that name is not too short
            if (value.Length >= 3) // Card name should be at least of 3 characters
                cardName = value;              
        }
    }    
}
info myInfo=new info();
lblWelcome.Text = myInfo.GetCardName();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM