如何在组合类设计中访问内部类的属性

本文关键字:访问 内部类 属性 组合 | 更新日期: 2023-09-27 18:36:19

我完全无法访问内部类内部的外部类属性...即使我制作了外部类的对象,在内部类中*这在构图设计中毫无意义*..即便如此,我也无法访问它们.有没有办法访问这些外部类属性?

场景是,有一些跑车只有在想要购买它的客户存在时才会被建造!

namespace composition{
public class CustomCar
{
    #region Attributes
    private string name;
    private string plateno;
    private double cost;
    private CarCustomer _customer = new CarCustomer();
    #endregion
    #region properties
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
    public double Cost
    {
        get { return cost; }
        set { cost = value; }
    }

    public string PlateNo
    {
        get { return plateno; }
        set { plateno = value; }
    }

    public CarCustomer Customer
    {
        get { return _customer; }
        set { _customer = value; }
    }

    #endregion
    #region methods
    public CustomCar()
    {
        Console.WriteLine("I am in custom car");
    }

    public CustomCar(string s1, string pno, double c, string s2, double n, double bc)
    {
        this.Name = s1;
        this.PlateNo = pno;
        this.Cost = c;
        this.Customer.Name1 = s2;
        this.Customer.Nic1 = n;
        this.Customer.BargainCost = bc;
    }
    public double finalCost()
    {
        if (this.Customer.BargainCost < 10000)
        {
            double FinalCost = (this.Cost - this.Customer.BargainCost);
            return FinalCost;
        }
        else
        {
            return this.Cost;
        }
    }
    public void show()
    {
        Console.WriteLine(this.name + this.PlateNo + this.Customer.Name1 + this.Customer.Nic1);
    }
    #endregion

    public class CarCustomer
    {
        private string name1;
        private double Nic;
        private double bargainCost;

        public double BargainCost
        {
            get { return bargainCost; }
            set { bargainCost = value; }
        }
        public double Nic1
        {
            get { return Nic; }
            set { Nic = value; }
        }

        public string Name1
        {
            get { return name1; }
            set { name1 = value; }
        }
        public CarCustomer()
        {
            Console.WriteLine("I have a customer");
        }
        public CarCustomer(string n1, double i1, double bc)
        {
            this.Name1 = n1;
            this.Nic = i1;
            this.BargainCost = bc;
        }
        public void showCustomer()
        {
            Console.WriteLine("Customer name:   " + Name1);
            Console.WriteLine("Customer NIC:    " + Nic1);
        }
    }
}
}

如何在组合类设计中访问内部类的属性

没有什么可以阻止您在 CarCustomer 中引用自定义汽车对象。 然后,这将在对象之间提供一对一的引用。 如果你认为这个对象在定制车的构造函数中取决于你

public CustomCar(arguments)
{
    this.Customer.CustomCar = this;
}

或者,您可以将其设置在属性访问器上的集合中,由您决定。 试试这个

public class CustomCar
{
    private string name;
    private string plateno;
    private double cost;
    private CarCustomer _customer = new CarCustomer();
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
    public double Cost
    {
        get { return cost; }
        set { cost = value; }
    }

    public string PlateNo
    {
        get { return plateno; }
        set { plateno = value; }
    }

    public CarCustomer Customer
    {
        get { return _customer; }
        set { _customer = value; }
    }
    public CustomCar()
    {
        Console.WriteLine("I am in custom car");
    }

    public CustomCar(string name, string pno, double c, string customerName, double n, double bc)
    {
        this.Name = name;
        this.PlateNo = pno;
        this.Cost = c;
        this.Customer.Name1 = customerName;
        this.Customer.Nic1 = n;
        this.Customer.BargainCost = bc;
        this.Customer.Car = this;
    }
    public double finalCost()
    {
        if (this.Customer.BargainCost < 10000)
        {
            double FinalCost = (this.Cost - this.Customer.BargainCost);
            return FinalCost;
        }
        else
        {
            return this.Cost;
        }
    }
    public void show()
    {
        Console.WriteLine(this.name + this.PlateNo + this.Customer.Name1 + this.Customer.Nic1);
    }
}
    public class CarCustomer
    {
        private string name1;
        private double Nic;
        private double bargainCost;
        private CustomCar customer;
        public double BargainCost
        {
            get { return bargainCost; }
            set { bargainCost = value; }
        }
        public double Nic1
        {
            get { return Nic; }
            set { Nic = value; }
        }       

        public string Name1
        {
            get { return name1; }
            set { name1 = value; }
        }
        public CustomCar Car
        {
            get{return customer;}
            set{customer = value;}
        }
        public CarCustomer()
        {
            Console.WriteLine("I have a customer");
        }
        public CarCustomer(string n1, double i1, double bc)
        {
            this.Name1 = n1;
            this.Nic = i1;
            this.BargainCost = bc;                  
        }
        public void showCustomer()
        {
            Console.WriteLine("Customer name:   " + Name1);
            Console.WriteLine("Customer NIC:    " + Nic1);
        }
    }
当然,

您无法访问它们。您已将其保护级别设置为 private 。为了从外部资源获取它们,它们的保护级别必须与所需的访问级别一致。在这种情况下,您应该能够将修饰符更改为protected并能够访问它们。

但是,看看你的类设计,我认为使用自动getter/setter语法会更好地为你服务。您在属性定义中没有执行任何特别的操作,因此删除私有变量并将属性更改为以下内容是有意义的:

public string Name { get; set; }
public double Cost { get; set; }
public string PlateNo { get; set; }
public CarCustomer Customer  { get; set; }

您仍然可以通过属性公开访问变量,并且不会有额外变量的所有混乱。