如何在 C# 中使用实例引用?

Posted

技术标签:

【中文标题】如何在 C# 中使用实例引用?【英文标题】:How to use an instance reference in c#? 【发布时间】:2021-11-11 01:34:56 【问题描述】:

我正在开发一个用 C# 编写的 Winforms 应用程序,该应用程序在匹配静态项时遇到问题。

这是我的代码

InitializeComponent();

string pnumber = Calculate.Peoplenumber.Text;
int peoplenumber = int.Parse(Calculate.Peoplenumber.Text);
int daynumber = int.Parse(Calculate.Daynumber.Text);
int Totalcost = int.Parse(Calculate.totalcost.Text);

int TripBasicCost = Totalcost / daynumber;
int TripDayCost = TripBasicCost / peoplenumber;

引用所有 Calculate.FormName 对象会产生此错误:

非静态字段、方法或属性需要对象引用。

观察form1.cs中的链接,出现对象链接,这里是一个连接的代码:

 public void Peoplenumber_TextChanged(object sender, EventArgs e)
 
 

但将其更改为 public static void 会产生此错误:

'Calculate.Peoplenumber_TextChanged(object, EventArgs)' 不能通过实例引用访问;改为使用类型名称来限定它

我想知道如何在这里适当地使用实例引用?

【问题讨论】:

什么静态项?您正在尝试获取某些 TextBox 的文本内容。在哪里?在包含这些控件的表单之外的表单中? Calculate 是什么?是您称为form1 的表格吗? --the link对象链接是什么? Peoplenumber_TextChanged 是一个事件处理程序。 -- 如果您需要将一些数据从一个表单传递到另一个表单,请在类对象中收集您需要的数据,并将此引用传递给例如需要它的表单的构造函数,从创建其实例的表单(可能最简单的例子)。 计算是我使用的形式,是的。我需要将 peoplenumber_textchanged 中的数据作为静态字符串传递,谢谢。 我们无法轻易理解您的问题,因为它包含很多错误/误解。最好只告诉我们您拥有什么以及您想做什么。 例如:“我有两个表单,CalculateForm 和 TotalForm。CalculateForm 有一个文本框 Operator1TextBox。TotalForm 显示 CalculateForm,用户在其中输入一个数字,然后单击 OK 隐藏表单。然后 TotalForm 中的代码需要检索键入的值并将其添加到总数中。这是我到目前为止编写的代码“-如果您这样陈述您的问题,我们可以用它做点什么 “但将其更改为 public static void 会产生此错误” - 感觉这应该是静态的不太可能 - 事实上,这种情况下的静态项目数应该接近零;但我们理解的唯一方法是查看代码 【参考方案1】:

为什么你不能创建一个模型来收集你在评论中提到的。 调用form2但调用this时在构造函数中注入模型 Peoplenumber_TextChanged 可能无法正常工作。

     public class MyClass
    
        public int Peoplenumber  get; set; 
        public int Daynumber  get; set; 
        public int totalcost  get; set; 
    

    public Form2(MyClass model)
    
        InitializeComponent();
        int peoplenumber = model.Peoplenumber;
        int daynumber = model.Daynumber;
        int Totalcost = model.totalcost;
        int TripBasicCost = Totalcost / daynumber;
        int TripDayCost = TripBasicCost / peoplenumber;
    

    public Calculate()
    
        InitializeComponent();
        //your other code

     //Form2 calling event
        var model = new MyClass
        
            Peoplenumber = int.Parse(Peoplenumber.Text),
            Daynumber = int.Parse(Daynumber.Text),
            totalcost = int.Parse(totalcost.Text)
        ;
            //you can validate values in the textboxes
        new Form2(model).ShowDialog();
       
    

【讨论】:

试试看,谢谢。

以上是关于如何在 C# 中使用实例引用?的主要内容,如果未能解决你的问题,请参考以下文章

C# 中结构的实例和成员的堆和堆栈如何工作?

如何在 C# 中使用全局变量?

C# 如何根据指定变量来实例化对象?

PHP 服务器在未将对象引用设置为对象实例时出现 C# Soap 客户端错误

在 Unity C# 中实例化游戏对象列表

如何在C#中写Excel文件