我有父類 Product 和子類 DairyProduct,我想在子類中設定父類的所有欄位和屬性,但我不想做很多新的建構式。如何在沒有新建構式的情況下在 DairyProduct 中設定屬性(名稱、價格和重量)?
還有代碼例如:
家長班
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Task1
{
public class Product
{
private string _name;
public string Name { get => _name; set => _name = value; }
private float _price;
public float Price
{
get => _price;
set => _price = value < 0 ? throw new ArgumentException() : _price = value;
}
private float _weight;
public float Weight
{
get { return _weight; }
set { _weight = value < 0 ? throw new ArgumentException() : _weight = value; }
}
public Product() : this(null, default, default) {}
public Product(string name, float price, float weight)
{
Name = name;
Price = price;
Weight = weight;
}
public virtual void Discount(float percentage)
{
if (percentage <= 100) Price = Price * (100 - percentage) / 100;
else throw new ArgumentException();
}
public override string ToString()
{
return string.Format("Name: {0}; Price: {1}; Weight: {2};", Name, Price, Weight);
}
public override bool Equals(object obj)
{
if (obj.GetType() != typeof(Product))
{
return false;
}
else
{
Product p = (Product)obj;
return p.Name == Name && p.Price == Price && p.Weight == Weight;
}
}
}
}
兒童班
using System;
namespace Task1
{
class DairyProduct : Product
{
public readonly DateTime ExpirationDate;
private int _daysToExpiration;
private bool _isFresh;
public DairyProduct()
{
_daysToExpiration = 90;
ExpirationDate = DateTime.Now.AddDays(_daysToExpiration);
_isFresh = true;
}
public DairyProduct(int daysToExpiration)
{
ExpirationDate = DateTime.Now.AddDays(daysToExpiration);
_isFresh = true;
}
public DairyProduct(DateTime experationDate, int daysToExpiration)
{
_daysToExpiration = daysToExpiration;
ExpirationDate = experationDate;
CheckExpirationDate();
}
public void CheckExpirationDate() => _isFresh = (ExpirationDate - DateTime.Now).Days > 0;
public override void Discount(float percentage)
{
CheckExpirationDate();
if (_isFresh)
{
float discontPersentage = (float)(1 - ((ExpirationDate - DateTime.Now).Days) / _daysToExpiration) percentage / 100;
if (discontPersentage >= 1)
{
Price = 0;
}
else
{
Price *= discontPersentage;
}
}
else
{
Price = 0;
}
}
public override string ToString()
{
return string.Format("Name: {0}; Price: {1}; Weight: {2}; Expiration date: {3}", Name, Price, Weight, ExpirationDate);
}
}
}
uj5u.com熱心網友回復:
您可以在子建構式引數中包含父屬性。然后呼叫 base() 方法來初始化父屬性。
public DairyProduct(string name, float price, float weight) :
base(name, price, weight)
{
_daysToExpiration = 90;
ExpirationDate = DateTime.Now.AddDays(_daysToExpiration);
_isFresh = true;
}
public DairyProduct(string name, float price,
float weight, int daysToExpiration) :
base(name, price, weight)
{
ExpirationDate = DateTime.Now.AddDays(daysToExpiration);
_isFresh = true;
}
public DairyProduct(string name, float price, float weight,
DateTime experationDate, int daysToExpiration) :
base(name, price, weight)
{
_daysToExpiration = daysToExpiration;
ExpirationDate = experationDate;
CheckExpirationDate();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/493141.html
