1

内部クラス内の外部クラス属性に完全にアクセスできません...外部クラスのオブジェクトを作成しても、内部クラス*で構成設計では意味がありません*..それでもアクセスできません..ですこれらの外部クラス属性にアクセスする方法はありますか?

シナリオは、それを購入したい顧客が存在する場合にのみ構築されるいくつかのスポーツカーがあるということです!..

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);
        }
    }
}
}
4

2 に答える 2

1

CarCustomerにCustomCarオブジェクトへの参照があることを妨げるものは何もありません。これにより、オブジェクト間の1対1の参照が得られます。このオブジェクトは、CustomCarのコンストラクターであなた次第です。

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);
        }
    }
于 2012-06-06T10:13:59.583 に答える
1

もちろん、それらにアクセスすることはできません。保護レベルをに設定しましたprivate。外部リソースからそれらを取得するには、それらの保護レベルが必要なアクセスレベルと一致している必要があります。この場合、修飾子をに変更しprotectedてアクセスできるようにする必要があります。

ただし、クラスの設計を見ると、自動ゲッター/セッター構文​​を使用した方がよいと思います。プロパティ定義で特に特別なことは何もしていないので、プライベート変数を削除してプロパティを次のように変更するのは理にかなっています。

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

プロパティを介して変数にパブリックアクセスすることはできますが、余分な変数の煩わしさをすべて感じることはありません。

于 2012-06-06T10:25:31.777 に答える