-6

C# で 2 つのクラスを関連付けようとしています。アソシエーションとは、あるクラス(クラスハウス)から別のクラス(クラスルーム)に至るまでの必然的な一端です。つまり、クラスルームのデータは、クラスハウスで 1 回から何度でも使用できますが、少なくとも 1 回は使用する必要があります。

たとえば、部屋には家が 1 つしかありませんが、家には少なくとも 1 つまたは複数の部屋が必要です。

私はこれまでのところこれを持っていますが、オブジェクトのインスタンスを作成していないようです..

 class house
 {
    string name;
    int house_num;

    list<room> rooms;

    public house()
    {
      rooms = new list<room>();
      rooms.Add(new room());
    }
 }

 class room
 {
   int num_of_rooms;

 }

これは、メインのcsファイルで呼び出すものです..

 house 94 = new house();
 room bedroom = new room();

 house.addRoom(bedroom);

だから私は基本的に、家には少なくとも1つの部屋が必要だと言いたいのですが、考えられる限り多くの部屋を持つこともできます. 何らかの理由で、上記のコードの「addRoom」部分が気に入らないようです。

助けてください!

4

3 に答える 3

1

これは基本的に必要なものであり、拡張できるものだと思います:

// Define a class for a house
public class House
{
    // Constructor for the House class
    // This gets called whenever your code creates a "new House(...);"
    public House(Room room)
    {
        // Initialize the list of rooms.
        _rooms = new List<Room>;
        // Add the passed room to the list of rooms
        _rooms.Add(room);
    }

    // This a "backing field" for the property below it. It is a
    // private variable that stores information about the class.
    private List<Room> _rooms;
    // This is the property that exposes the above backing field.
    // This property only has a "get" method, which means that you can only
    // read the property value. However, you can still add rooms to the list,
    // even though that may seem like writing. The difference is that you cannot
    // assign a completely new list to the property.
    public List<Room> Rooms
    {
        get { return _rooms; }
    }

    // You can add methods to a class to perform a task.
    // The method below adds a room to the list of rooms.
    public void AddRoom(Room room)
    {
        _rooms.Add(room);
    }
}

public class Room
{

}

クラスのコンストラクターHouseは 1 つの部屋を取るため、House の作成時に最初から 1 つの部屋が追加されHouse94 = new House(new Room());ます。を呼び出すと、さらに部屋を追加できますHouse94.Rooms.Add(new Room())

于 2013-04-10T14:17:25.217 に答える
1

ここにいくつかの良い例がありますが、C# を初めて使用する人をガイドするのに役立つ、完全に機能するコンソールの例を次に示します。初心者を混乱させないようにしているので、これは福音やベストプラクティスではありませんが、ほとんどのことの簡単な例を含めました(読み取り専用フィールドは、コンストラクター、単純なプロパティなどによってのみ設定できます)が、良いスターターになることを願っています!

namespace Example.ActualApp
{
    using System;
    using System.Collections.Generic;

    /// <summary>
    /// The Program
    /// </summary>
    internal class Program
    {
        /// <summary>
        /// The main entry point.
        /// </summary>
        static void Main(string[] args)
        {
            // Create a new house with a bedroom
            Room bedroom1 = new Room("Master bedroom");
            House sampleHouse = new House("My house", bedroom1);

            // Add a room
            Room sittingRoom = new Room("Main sitting room");
            sampleHouse.AddRoom(sittingRoom);

            // Wait for user to press a button
            Console.WriteLine("\r\nFinished, press a key to end.");
            Console.ReadKey();
            return;
        }
    }

    /// <summary>
    /// House class
    /// </summary>
    internal class House
    {
        // Private fields
        private readonly string _name = string.Empty;
        private List<Room> _rooms = null;

        /// <summary>
        /// Initializes a new instance of the <see cref="House"/> class.
        /// </summary>
        /// <param name="name">The name of the house.</param>
        /// <param name="room">The default room.</param>
        public House(string name, Room room)
        {
            // Store the house name and initialise the rooms collection
            _name = name;
            _rooms = new List<Room>();
            Console.WriteLine("New house created called '{0}'", name);

            // Now add the default room
            this.AddRoom(room);
        }

        /// <summary>
        /// Adds a room to the house.
        /// </summary>
        /// <param name="room">The room.</param>
        public void AddRoom(Room room)
        {
            _rooms.Add(room);
            Console.WriteLine("Room called '{0}' added to house called '{1}'", room.Name, _name);
        }
    }

    /// <summary>
    /// Room class
    /// </summary>
    internal class Room
    {
        private string _roomName = string.Empty;

        /// <summary>
        /// Initializes a new instance of the <see cref="Room"/> class.
        /// </summary>
        /// <param name="name">The name of the room.</param>
        public Room (string name)
        {
            _roomName = name;
            Console.WriteLine("New room created called '{0}'", name);
        }

        /// <summary>
        /// Example property (never pass fields around)
        /// </summary>
        public string Name
        {
            get
            {
                return _roomName;
            }

            set
            {
                _roomName = value;
            }
        }
    }
 }
于 2013-04-10T14:40:22.820 に答える
0

コードの他の問題を見渡すと、 class のコンストラクターに 1 つ以上の部屋を追加できますhouse。これにより、少なくとも指定した部屋が家にあることが保証されます。

編集:あなたはすでにこれを行っているようですが、あなたが何を求めているのかさえわかりません:p

于 2013-04-10T14:10:52.787 に答える