Одно слово: наследство.
Свойства наследуются, а поля - нет. Вы можете использовать поля в унаследованном классе, но не можете изменять их поведение, делая их виртуальными.
Примерно так:
public class Foo {
public virtual int MyField = 1; // Nope, this can't
public virtual int Bar {get; set; }
}
public class MyDerive : Foo {
public override MyField; // Nope, this can't
public override int Bar {
get {
//do something;
}
set; }
}
Редактировать: Помимо факта наследования, точки, указанные в других ответах (например, видимость), также являются огромным преимуществом свойств по сравнению с полями.
Если вы не хотите явно назначать window.onload или использовать фреймворк, рассмотрите:
<script type="text/javascript">
function startClock(){
//do onload work
}
if(window.addEventListener) {
window.addEventListener('load',startClock,false); //W3C
} else {
window.attachEvent('onload',startClock); //IE
}
</script>
Вставьте это в любое место страницы:
<script type="text/javascript">
window.onload = function(){
//do something here
}
</script>
Page.ClientScriptManager.RegisterStartupScrip(this.GetType(), "startup", "startClock();", true);
or using prototype
document.observe("dom:loaded", function() {
// code here
});
Самый чистый способ - это использование javascript-фреймворка, например jQuery. В jQuery вы можете определить функцию on-load следующим образом:
$(function() {
// ...
});
Или, если вам не нравится короткий стиль $();
:
$(document).ready(function() {
// ...
});