$(document).ready(function() {
let percentValue = 0,
progressBar = $('.progress-bar');
timer = setInterval(startBar, 500);
$.ajax({
url: "http://www.mocky.io/v2/5c3f66243500002d2cec3954",
type: "GET",
dataType: "json",
beforeSend: function() {
startBar();
},
success: function() {
clearInterval(timer);
}
}).done(function(data) {
alert("success");
console.log(data);
}).fail(function(jqxhr, textStatus, error) {
var err = textStatus + ", " + error;
console.log("Request Failed: " + err);
});
function startBar() {
if (percentValue < 100) {
percentValue += 25;
}
progressBar.css("width", percentValue + "%").html(percentValue + "%");
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="progress">
<div class="progress-bar" role="progressbar"></div>
</div>
Нет, Вы не можете!
(Я собирался записать "Да", но после того, чтобы читать сообщение Anthony и испытания несколько тонких настроек, я нашел, что ответ был НЕТ!)
class FooBar : IFoo, IBar
{
public int Offset{get;set;}
}
(Генерирует предупреждение, как Anthony указывает, который может быть зафиксирован путем добавления "нового" ключевого слова.)
При испытании кода:
IBar a = new FooBar();
a.Offset = 2;
int b = a.Offset;
Последняя строка генерирует ошибку компиляции, так как Вы скрыли метод set Смещения IBAR.
Править: Закрепленный accesibillity модификатор на свойстве в классе. Спасибо Anthony!
Это близко, но никакой банан.
interface IFoo
{
int Offset { get; }
}
interface IBar : IFoo
{
new int Offset { set; }
}
class Thing : IBar
{
public int Offset { get; set; }
}
Отметьте new
ключевое слово в IBar, но это переопределяет получить средство доступа IFoo, таким образом, IBar не имеет получения. Следовательно не Вы не можете на самом деле создать IBar, который просто добавляет набор, пока хранение существующего добирается.
+1 к Arjan Einbu
Конечно, потребители IBar не смогут получить значение свойства Offset, потому что наследование IFoo не изменяется семантический из свойства Offset, определенного в IBar - компилятор предупреждает Вас по причине. Когда Вы используете "новый" компилятор ключевого слова, полностью удаляет разрешение неоднозначности и рассматривает IBar. Смещение как только для записи. Однако потребители класса, наследованного от интерфейса IBar, смогут получить и установить свойство Offset.
Там различие становится более примечательным при использовании явной интерфейсной реализации:
class Boo: IBar
{
int IFoo.Offset { get { return 0; } }
int IBar.Offset
{
set { } // OK - IBar has a setter
get { return 1; } // compiler error - IBar.Offset doesn't inherit setter
}
}
class Program
{
static void Main(string[] args)
{
Boo b = new Boo();
int x = ((IFoo) b).Offset; // OK - IFoo.Offset has getter
((IBar) b).Offset = 1; // OK - IBar.Offset has setter
x = ((IBar) b).Offset; // compiler error - IBar doesn't inherit
// getter from IFoo
}
}
То, что Вы могли сделать, имеет IBar-интерфейс, имеющий метод считывания и метод set (нет действительно никакого смысла из не наличия этого). Когда у Вас только есть метод set в IBar, Вы действительно явно говорите, что "в интерфейсе IBar Смещение propery только для записи", это, очевидно, не, что Вы хотите.
interface IFoo
{
int Offset { get;}
}
interface IBar : IFoo
{
new int Offset { get; set; }
}
class Thing : IBar
{
public int Offset
{
get;
set;
}
}
Теперь можно использовать класс Вещь как это:
var t = new Thing();
t.Offset = 1;
int read = t.Offset;