从另一个类调用非静态变量

时间:2013-07-04 12:13:34

标签: c# variables encapsulation

我想从另一个类调用非静态变量。如果我将其设为静态,则会影响我的其他代码。

我有两个类Harvest_Client和Harvest_Project。

在我的Harvest_Project课程中,我

public int _client_id{ get; set;}

我只想在Harvest_Client类中做,

public int _id = Harvest_Project._client_id;

我该怎么做?

3 个答案:

答案 0 :(得分:4)

首先,您应该重命名属性(它不是变量)以符合.NET命名约定,例如

public int ClientId { get; set; }

接下来,您需要HarvestProject实例(重命名后)。不要只是创建一个新的 - 你需要正确的实例,你感兴趣的客户ID的实例。我们不能告诉你它是哪一个 - 但如果你不知道已经有HarvestProject的实例,你应该弄清楚你希望如何指定你想要的客户ID。

这样想:如果我问你“一个人多大了?”你自然想知道我在谈论哪个的人。这里完全一样。

答案 1 :(得分:1)

可能会将对该类的引用传递给您所需的内容:

public class Harvest_Project
    {
        public string Name { get; set; }
        public int clientId { get; set; }
    }

    public class Harvest_Client
    {
        private Harvest_Project MyInstance;

        private int myid;

        public int MyId
        {
            get
            {
                return myid;
            }
            private set
            {
                MyId = value;
            }
        }
        public Harvest_Client(Harvest_Project cls)
        {
            MyInstance = cls;
            MyId = cls.clientId;//since class reference present no 
                                //need for the property.
                                //its just here to show if in your
                                //project you really just need ID
                                //in this example its redundant
        }

    }

根据您的尝试,您可以创建一个Harvest_Project对象列表或更好的字典,如果有各种类型的“项目”,则可以将它们全部放在根据指定密钥编目的字典中。

答案 2 :(得分:0)

我想建议考虑下面的属性声明public int ClientId {get; private set;"}它允许您禁止从第三方代码设置此变量,如果您确实需要它。否则你将拥有普通的全局变量