C# OOP:什么东西去哪里,在对象之间共享状态

C# OOP:什么东西去哪里,在对象之间共享状态,c#,class,oop,C#,Class,Oop,我正在跳进OOP。但仍然很难理解如何做到这一点。我有以下基本的例子 我有一只狗,它住在一所房子里。所以这里我有两门课 class House { private string _name; public string Name { get { return _name; } } public House(string name) { _name = name; } } 这所房子有雷克斯之家、狗之家之类的

我正在跳进OOP。但仍然很难理解如何做到这一点。我有以下基本的例子

我有一只狗,它住在一所房子里。所以这里我有两门课

class House
{
    private string _name;

    public string Name
    {
        get { return _name; }
    }

    public House(string name)
    {
        _name = name;
    }
}
这所房子有雷克斯之家、狗之家之类的名字,它对住在里面的狗一无所知

class Dog
{
    private string _name;
    private House _house;

    public string Name
    {
        get { return _name; }
    }

    public string House
    {
        get { return _house.Name; }
    }

    public Dog(string name, House house)
    {
        _name = name;
        _house = house;
    }
}
狗一出生就有了名字和房子

class Program
{
    static void Main(string[] args)
    {
        var house = new House("Dog house");
        var dog = new Dog("Rex", house);
    }
}
假设这条狗现在大了,你告诉它去那所房子,因为它坏了

我应该在Dog类中实现一个名为GoIntoTheHouse的方法吗

但是如果其他狗在那一刻拿走了房子,而房子已经满了呢?该状态应如何保存以及保存在何处

除此之外:


也许有某种来源可以通过这种真实世界的例子来学习OOP?

严格地基于你的例子,如果房子一次只能有一只狗,但是房子可以被任何你想要的狗作为房子的财产而不是你现在拥有的东西来访问。

设计你的问题有很多方法,但是对于你应该实现一个方法的问题,是的,你应该实现,因为它已经是一个动作/行为了,对于一个类或对象,我应该说它需要在任何时候被告知去实现

O'reilly是一本编程方面的好书


但是,如果你不想买一本书,这里也有一个很好的参考文献

,我个人认为狗舍占用是狗舍的责任,而不是狗的责任,所以我会让狗舍有狗的财产,而不是狗有房子的财产。如果你有几个狗屋,你可以像列表一样将它们添加到集合中。然后,如果一只新狗出生了,你想给它找一所房子,你可以查询一个免费的狗屋集合var house=houses.FirstOrDefaulth=>h.dog==null;我强烈推荐阅读。我想推荐。这与OOP无关,但它确实为您提供了一些关于如何构造代码的相当好的想法,比如哪些类实际上应该承担哪些职责。