[英]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
类实例的情况下访问GetCardName
和SetCardName
:
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
类实例后,您可以访问GetCardName
和SetCardName
:
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.