using System;
using System.Diagnostics.Contracts;
public class Program {
public static void Main() {
short numero = 2017;
var m = new ShortYear(numero);
Console.WriteLine(m);
}
}
//provavelmente teria implemnetações de operadores, outros métodos e das interfaces
//IFormattable, IConvertible, IComparable<ShortYear>, IEquatable<ShortYear> e outras
public struct ShortYear {
public byte Year;
public const short Century = 1900;
public ShortYear(short value) {
Contract.Ensures(value >= Century && value < Century + 256);
Year = (byte)(value - Century);
}
public ShortYear(int value) {
Contract.Ensures(value >= Century && value < Century + 256);
Year = (byte)(value - Century);
}
public static implicit operator short(ShortYear value) => (short)(value.Year + Century);
public static implicit operator int(ShortYear value) => value.Year + Century;
public override int GetHashCode() => Year.GetHashCode();
public override String ToString() => (Year + Century).ToString();
}
//https://pt.stackoverflow.com/q/221079/101
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uRGlhZ25vc3RpY3MuQ29udHJhY3RzOwoKcHVibGljIGNsYXNzIFByb2dyYW0gewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKSB7CgkJc2hvcnQgbnVtZXJvID0gMjAxNzsKCQl2YXIgbSA9IG5ldyBTaG9ydFllYXIobnVtZXJvKTsKCQlDb25zb2xlLldyaXRlTGluZShtKTsKCX0KfQovL3Byb3ZhdmVsbWVudGUgdGVyaWEgaW1wbGVtbmV0YcOnw7VlcyBkZSBvcGVyYWRvcmVzLCBvdXRyb3MgbcOpdG9kb3MgZSBkYXMgaW50ZXJmYWNlcwovL0lGb3JtYXR0YWJsZSwgSUNvbnZlcnRpYmxlLCBJQ29tcGFyYWJsZTxTaG9ydFllYXI+LCBJRXF1YXRhYmxlPFNob3J0WWVhcj4gZSBvdXRyYXMKcHVibGljIHN0cnVjdCBTaG9ydFllYXIgewoJcHVibGljIGJ5dGUgWWVhcjsKCXB1YmxpYyBjb25zdCBzaG9ydCBDZW50dXJ5ID0gMTkwMDsKCXB1YmxpYyBTaG9ydFllYXIoc2hvcnQgdmFsdWUpIHsKCQlDb250cmFjdC5FbnN1cmVzKHZhbHVlID49IENlbnR1cnkgJiYgdmFsdWUgPCBDZW50dXJ5ICsgMjU2KTsKCQlZZWFyID0gKGJ5dGUpKHZhbHVlIC0gQ2VudHVyeSk7Cgl9CglwdWJsaWMgU2hvcnRZZWFyKGludCB2YWx1ZSkgewoJCUNvbnRyYWN0LkVuc3VyZXModmFsdWUgPj0gQ2VudHVyeSAmJiB2YWx1ZSA8IENlbnR1cnkgKyAyNTYpOwoJCVllYXIgPSAoYnl0ZSkodmFsdWUgLSBDZW50dXJ5KTsKCX0KICAgIHB1YmxpYyBzdGF0aWMgaW1wbGljaXQgb3BlcmF0b3Igc2hvcnQoU2hvcnRZZWFyIHZhbHVlKSA9PiAoc2hvcnQpKHZhbHVlLlllYXIgKyBDZW50dXJ5KTsKICAgIHB1YmxpYyBzdGF0aWMgaW1wbGljaXQgb3BlcmF0b3IgaW50KFNob3J0WWVhciB2YWx1ZSkgPT4gdmFsdWUuWWVhciArIENlbnR1cnk7CglwdWJsaWMgb3ZlcnJpZGUgaW50IEdldEhhc2hDb2RlKCkgPT4gWWVhci5HZXRIYXNoQ29kZSgpOwoJcHVibGljIG92ZXJyaWRlIFN0cmluZyBUb1N0cmluZygpID0+IChZZWFyICsgQ2VudHVyeSkuVG9TdHJpbmcoKTsKfQoKLy9odHRwczovL3B0LnN0YWNrb3ZlcmZsb3cuY29tL3EvMjIxMDc5LzEwMQ==