Я не знаю, достаточно ли описательный вопрос, но почему и как такое поведение существует?:
public class Layer
{
public string Name { get; set; }
private IEnumerable<Layer> children;
public IEnumerable<Layer> Children
{
get { return this.children.Where ( c => c.Name != null ).Select ( c => c ); }
set { this.children = value; }
}
public Layer ( )
{
this.children = new List<Layer> ( ); // Fine
Layer layer = new Layer ( );
layer.children = new List<Layer> ( ); // Isn't .children private from the outside?
}
}
Я могу получить доступ к слою.Children
где угодно, это нормально, но как я могу получить доступ к layer.children
, поскольку он частный?
Layer layer = new Layer ( );
layer.children = new List<Layer> ( );
работает, только если код находится внутри класса Layer
. Существует ли специальный код для обработки доступа к частным переменным по-разному, если он выполняется внутри содержащего класса, даже если доступ осуществляется извне?
Я знаю причину использования:
this.children = ...
внутри содержащего класса, но создания новых экземпляров и изменение их извне, даже если они все еще находятся в содержащем классе, не кажется хорошей практикой.
What '
В форме HTML у меня есть поле файла, подобное этому:
<div class="filefield">
<input type="file" name="myfile" id="fileinput">
</div>
Оно отображает кнопку и некоторый текст помимо кнопки. Если файл еще не выбран, отображается следующий текст: Файл не выбран
. Если файл уже выбран, отображается имя файла.
Этот текст отображается справа от кнопки. Я хочу, чтобы он отображался под кнопкой. Я пробовал множество вещей в CSS, но ничего не работает. Файл не выбран
всегда отображается с правой стороны кнопки, даже если и div, и input имеют фиксированную ширину, равную ширине кнопки и фиксированной высоты, достаточной для размещения кнопки и двух строк текста, текст по-прежнему отображается справа, за пределами div, а не ниже места внутри div. Как сделать так, чтобы текст отображался под кнопкой?