using System;
public class Bus
{
protected static readonly DateTime globalStartTime;
protected static readonly int FirstBusNumber;
protected int RouteNumber { get; set; }
static Bus( /*int firstBusNumber*/ ) //Error if uncomment: The static constructor must be parameterless
{
//FirstBusNumer = firstBusNumber;
globalStartTime = DateTime.Now ;
Console.WriteLine ( "The First Bus #{0} starts at global start time {1}" ,
FirstBusNumber,
globalStartTime.ToLongTimeString ( ) ) ;
}
public Bus( int routeNum)
{
RouteNumber = routeNum;
Console.WriteLine ( "Bus #{0} is created." , RouteNumber) ;
}
public void Drive( )
{
TimeSpan elapsedTime = DateTime.Now - globalStartTime;
Console.WriteLine ( "{0} is starting its route {1:N2} minutes after the first Bus #{2}." ,
this.RouteNumber ,
elapsedTime.TotalMilliseconds ,
FirstBusNumber
) ;
}
}
class TestBus
{
static void Main( )
{
Bus bus1 = new Bus( 71 ) ;
Bus bus2 = new Bus( 72 ) ;
bus1.Drive ( ) ;
System.Threading .Thread .Sleep ( 25 ) ;
bus2.Drive ( ) ;
System.Console .WriteLine ( "Press any key to exit." ) ;
System.Console .ReadKey ( ) ;
}
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIEJ1cwp7CiAgICBwcm90ZWN0ZWQgc3RhdGljIHJlYWRvbmx5IERhdGVUaW1lIGdsb2JhbFN0YXJ0VGltZTsKICAgIHByb3RlY3RlZCBzdGF0aWMgcmVhZG9ubHkgaW50IEZpcnN0QnVzTnVtYmVyOwogICAgIAogICAgcHJvdGVjdGVkIGludCBSb3V0ZU51bWJlciB7IGdldDsgc2V0OyB9CgoKICAgIHN0YXRpYyBCdXMoLyppbnQgZmlyc3RCdXNOdW1iZXIqLykvL0Vycm9yIGlmIHVuY29tbWVudDogVGhlIHN0YXRpYyBjb25zdHJ1Y3RvciBtdXN0IGJlIHBhcmFtZXRlcmxlc3MKICAgIHsKICAgICAgICAgLy9GaXJzdEJ1c051bWVyID0gZmlyc3RCdXNOdW1iZXI7CiAgICAgICAgZ2xvYmFsU3RhcnRUaW1lID0gRGF0ZVRpbWUuTm93OwoKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiVGhlIEZpcnN0IEJ1cyAjezB9IHN0YXJ0cyBhdCBnbG9iYWwgc3RhcnQgdGltZSAgezF9IiwgCiAgICAgICAgICAgIEZpcnN0QnVzTnVtYmVyLAogICAgICAgICAgICBnbG9iYWxTdGFydFRpbWUuVG9Mb25nVGltZVN0cmluZygpKTsKICAgIH0KCiAgICBwdWJsaWMgQnVzKGludCByb3V0ZU51bSkgCiAgICB7CiAgICAgICAgUm91dGVOdW1iZXIgPSByb3V0ZU51bTsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiQnVzICN7MH0gaXMgY3JlYXRlZC4iLCBSb3V0ZU51bWJlcik7CiAgICB9CgogICAgcHVibGljIHZvaWQgRHJpdmUoKQogICAgewogICAgICAgIFRpbWVTcGFuIGVsYXBzZWRUaW1lID0gRGF0ZVRpbWUuTm93IC0gZ2xvYmFsU3RhcnRUaW1lOwogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJ7MH0gaXMgc3RhcnRpbmcgaXRzIHJvdXRlIHsxOk4yfSBtaW51dGVzIGFmdGVyIHRoZSBmaXJzdCBCdXMgI3syfS4iLAogICAgICAgICAgICB0aGlzLlJvdXRlTnVtYmVyLAogICAgICAgICAgICBlbGFwc2VkVGltZS5Ub3RhbE1pbGxpc2Vjb25kcywKICAgICAgICAgICAgRmlyc3RCdXNOdW1iZXIKICAgICAgICApOwogICAgfQp9CgpjbGFzcyBUZXN0QnVzCnsKICAgIHN0YXRpYyB2b2lkIE1haW4oKQogICAgewogICAgICAgIEJ1cyBidXMxID0gbmV3IEJ1cyg3MSk7CiAgICAgICAgQnVzIGJ1czIgPSBuZXcgQnVzKDcyKTsKICAgICAgICBidXMxLkRyaXZlKCk7CiAgICAgICAgU3lzdGVtLlRocmVhZGluZy5UaHJlYWQuU2xlZXAoMjUpOwogICAgICAgIGJ1czIuRHJpdmUoKTsKICAgICAgICBTeXN0ZW0uQ29uc29sZS5Xcml0ZUxpbmUoIlByZXNzIGFueSBrZXkgdG8gZXhpdC4iKTsKICAgICAgICBTeXN0ZW0uQ29uc29sZS5SZWFkS2V5KCk7CiAgICB9Cn0K