Объект класса (x) как атрибут класса (y)

#c# #oop #object #constructor #attributes

#c# #ооп #объект #constructor #атрибуты

Вопрос:

Я не смог найти ответ на это, потому что я не знал, как это выразить.

У меня есть класс Car() и класс Owner(). Что мне нужно, так это иметь объект ‘owner’ в качестве простого атрибута моего класса Car (), чтобы я мог передать его в качестве аргумента, как только создам экземпляр своего объекта Car ().

Мой класс Owner():

 class Owner
{
    public Owner(string address){
        this.address = address;
    }
}
  

Мой класс Car():

 class Car
{
    public Car(object owner){ // what type to use?
        this.owner = owner; 
    }

    private object owner; // what type to use?
}
  

И мой класс Main():

 static void Main(string[] args){
    Owner owner1 = new Owner("street foo city bar");
    Car car1 = new Car(owner1); // this needs to work
}
  

Очевидно, что использование типа ‘object’ для атрибута этого не сделало. Как только я печатаю, я получаю ‘MyProjectName.Владелец’. Заранее благодарю вас.

Комментарии:

1. public Car(Owner owner) ?

Ответ №1:

Вы можете написать свой код, как показано ниже, написав общедоступные методы для возврата нужных вам объектов.

  class Program
    {
        static void Main(string[] args)
        {
            Owner owner1 = new Owner("street foo city bar");
            Car car1 = new Car(owner1); // this needs to work

            Console.WriteLine("Car 1 owner address : "   car1.getOwner().getAddress());
            Console.ReadKey();


        }
    }


    class Car
    {
        private Owner owner;  // same here
        public Car(Owner owner)
        { // use Owner class
            this.owner = owner;
        }

        public Owner getOwner() // write a public method to return owner
        {
            return this.owner;
        }


    }


    class Owner
    {

        private string address; // this 
        public Owner(string address)
        {

            this.address = address;
        }

        public string getAddress() // write a public method to return address
        {
            return this.address;
        }
    }
  

Комментарии:

1. Блин, я уже создал свои методы получения и установки, чтобы попробовать это, к счастью, я дважды проверил это, и мой ‘public Owner getOwner()’ на самом деле был ‘public Object getOwner()’ (моя предыдущая попытка перед тем, как задать вопрос). Моя среда разработки заставила меня изменить мой установщик, но не мой получатель. Спасибо, что помог мне осознать это.

Ответ №2:

 public class Car
{
    public Car(Owner owner)
    {
        this.Owner = owner;
    }

    //Since Owner is public, you don't have to create a getter method for this. i.e GetOwner()
    public Owner Owner;
}

public class Owner
{
    //Since address is private, you'll have to create a public getter for this
    private string address;

    public Owner(string address)
    {
        this.address = address;
    }

    //public getter for the address
    public string GetAddress()
    {
        return this.address;
    }
}

public class Main
{
    static void main(string[] args)
    {
        Owner owner1 = new Owner("street address");
        Car car1 = new Car(owner1);

        car1.Owner.GetAddress();
    }
}
  

Комментарии:

1. Что ж, кажется, это работает, но я все еще получаю ‘MyProjectName. Владелец’, что имеет смысл. Честно говоря, я не хочу больше ничего с этим делать; мне просто нужно выполнить это: связать автомобиль с его владельцем при создании объекта. Есть какие-нибудь подсказки о том, как это проверить? Например, вывод имени переменной-владельца или доступ к одному из ее атрибутов. Что-то вроде ‘car1.getOwner().getAddress()’.

2. @JhonatanCruz вам нужно будет создать getAddress() метод в вашем Owner классе, который возвращает this.address . Я обновил ответ на ваш вопрос.