You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何获取从栈中弹出的自定义Class1对象的成员属性值(如人员姓名)

核心问题定位

你当前的代码存在两个无法正常运行的核心问题:

  • Class1中定义的string _name { get; set; }这类自动属性,默认访问级别为private,属于类的私有成员,外部代码完全无法读取;同时你在Main方法中写的person.name()调用完全不匹配实际的成员定义:既没有叫name的公开方法,属性名也不是不带下划线的name。
  • 存储在实例内部的人员姓名没有对外暴露公开读取入口,导致即便成功弹出栈内的Class1对象,也无法获取内部存储的姓名值。
落地修正方案

1. 调整Class1的成员访问级别

把需要外部读取的属性改成公开可读的自动属性,原有构造函数的赋值逻辑保持不变即可:

// 公开属性设置为可读,写入权限限定在类内部,避免外部随意篡改实例数据
public string Name { get; private set; }
public int Rank { get; private set; }
public string RankName { get; private set; }

public Class1(string name, int rank)
{
    Name = name;
    Rank = rank;
}
public Class1(string name, string rankName)
{
    Name = name;
    RankName = rankName;
}

如果强行保留你原来的_name命名,也可以把属性写成public string _name { get; private set; },但这种写法不符合.NET平台的公开成员命名规范,长期维护会增加额外成本,不推荐使用。

2. 修正Main方法中的调用逻辑

属性是类的存储成员,不是可执行方法,不需要加括号调用,修改为直接读取公开属性即可:

Deck d = new Deck();
Class1 person = d.getPerson();
// 直接访问公开的Name属性,无需加括号
Console.WriteLine(person.Name);
常见踩坑提醒
  • 如果不调整属性的访问级别,无论怎么修改外部调用代码,都会触发编译错误,提示“当前上下文中不存在对应名称”,因为私有成员只能在类的内部方法中访问。
  • 你写的getPerson()方法直接调用stackOne.Pop(),如果栈内没有任何元素,会直接抛出运行时异常,建议在Pop之前增加stackOne.Count的栈空判断,避免程序意外崩溃。

内容的提问来源于stack exchange,提问作者User17353

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 23:36:03