Добавить к bhadra's список из идиоматических руководств:
представление Checkout Anthony Baxter Эффективное Программирование Python (с 2005 OSON).
выборка:
# dict's setdefault method turns this:
if key in dictobj:
dictobj[key].append(val)
else:
dictobj[key] = [val]
# into this:
dictobj.setdefault(key,[]).append(val)
Вы должны объявить их как «защищенные», а не частные
Один (плохой) вариант - сделать поля защищенными
- но не делайте этого; он по-прежнему нарушает правильную инкапсуляцию. Два хороших варианта:
примеры:
public string Name { get; protected set; }
(C # 2.0)
private string name;
public string Name {
get { return name; }
protected set { name = value; }
}
или:
class BaseType {
private string name;
public BaseType(string name) {
this.name = name;
}
}
class DerivedType : BaseType {
public DerivedType() : base("Foo") {}
}
Предложение Филиппа объявить поля как protected
вместо private
действительно сработает, но я предлагаю вам не делать этого в любом случае.
Зачем это нужно производный класс заботится о деталях реализации того, как хранятся данные? Я предлагаю вам раскрыть защищенные свойства , которые (в настоящее время) поддерживаются этими полями, вместо того, чтобы открывать сами поля.
Вероятно, вы ищете концепцию, называемую наследованием конструктора. Вы можете передать аргументы конструктору базовых классов - см. Этот пример, где у Audi есть флаг, указывающий, является ли это выпуск S-Line или нет:
namespace ConstructorInheritance
{
abstract class Car
{
private int horsePower;
private int maximumSpeed;
public Car(int horsePower, int maximumSpeed)
{
this.horsePower = horsePower;
this.maximumSpeed = maximumSpeed;
}
}
class Audi : Car
{
private bool isSLineEdition = false;
// note, how the base constructor is called _and_ the S-Line variable is set in Audi's constructor!
public Audi(bool isSLineEdition, int horsePower, int maximumSpeed)
: base(horsePower, maximumSpeed)
{
this.isSLineEdition = isSLineEdition;
}
}
class Program
{
static void Main(string[] args)
{
Car car = new Audi(true, 210, 255);
// break here and watch the car instance in the debugger...
}
} }