首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得其他类设置的值

如何获得其他类设置的值
EN

Stack Overflow用户
提问于 2015-03-11 20:34:50
回答 2查看 91关注 0票数 1

我是C#的新手,假设我有4门课:

持票人:

代码语言:javascript
复制
public class Holder
{
    private string name;
    public string Name
    {
        get
        {
            return name;
        }
        set
        {
            name = value;
        }
    }
}

SecondClass:

代码语言:javascript
复制
public class SecondClass
{
    public void SecondClassMethod()
    {
        Holder holder = new Holder();
        holder.Name = "John";
        Console.WriteLine(holder.Name + " from SecondClass");
    }
}

AnotherClass:

代码语言:javascript
复制
public class AnotherClass
{
    public void AnotherClassMethod()
    {
        Holder holder = new Holder();
        holder.Name = "Raphael";
        Console.WriteLine(holder.Name + " from AnotherClass");
    }

}

和期末课程:

代码语言:javascript
复制
class Program
{
    static void Main(string[] args)
    {
        Holder x1 = new Holder();
        SecondClass x2 = new SecondClass();
        AnotherClass x3 = new AnotherClass();

        x1.Name = "Nobody";
        Console.WriteLine(x1.Name);
        x2.SecondClassMethod();
        Console.WriteLine(x1.Name);
        x3.AnotherClassMethod();
        Console.WriteLine(x1.Name);

        Console.ReadLine();            
    }
}

运行程序后输出:

代码语言:javascript
复制
Nobody
John from SecondClass
Nobody
Raphael from AnotherClass
Nobody

我的问题是:如何使用Program类获得正确的名称(由其他类指定)?问题是我想用那套,上霍尔德的课。我搞不懂。

我想要:

代码语言:javascript
复制
Nobody
John from SecondClass
John
Raphael from AnotherClass
Raphael

as输出

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-11 20:37:26

在每个类中实例化一个新实例 of Holder。为了修改现有实例,需要对其他类进行传递引用

您可以通过引入构造函数实现这一点,您可以将对Holder实例的引用存储在私有 (最好是只读) 字段中。

代码语言:javascript
复制
public class SecondClass
{
    private readonly Holder _holder;
    public SecondClass(Holder holder)
    {
        _holder = holder;
    }

    public void SecondClassMethod()
    {
        _holder.Name = "John";
        Console.WriteLine(_holder.Name + " from SecondClass");
    }
}

然后使用该类更改代码:

代码语言:javascript
复制
Holder x1 = new Holder();
SecondClass x2 = new SecondClass(x1);
票数 4
EN

Stack Overflow用户

发布于 2015-03-11 20:55:44

此外,还可以在类中使用公共财产存储要修改的Holder实例的引用:

代码语言:javascript
复制
public class SecondClass
{
    public Holder Holder { get; set; }

    public SecondClass(){}

    public void SecondClassMethod()
    {
        if (Holder!=null)
        {
            Holder.Name = "John";
            Console.WriteLine(Holder.Name + " from SecondClass");
        } 
    }
}

然后在Main方法中可以这样做:

代码语言:javascript
复制
Holder x1 = new Holder();
SecondClass x2 = new SecondClass(){Holder=x1};
x2.SecondClassMethod();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28996810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档