mirror of https://github.com/icsharpcode/ILSpy.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
306 lines
4.7 KiB
306 lines
4.7 KiB
using System; |
|
using System.ComponentModel; |
|
|
|
namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty |
|
{ |
|
internal class FieldKeyword |
|
{ |
|
public class BaseVirtual |
|
{ |
|
public virtual int P { |
|
get { |
|
return field; |
|
} |
|
set { |
|
field = value + 1; |
|
} |
|
} |
|
} |
|
|
|
public class DerivedVirtual : BaseVirtual |
|
{ |
|
public override int P { |
|
get { |
|
return field * 2; |
|
} |
|
set { |
|
field = value - 1; |
|
} |
|
} |
|
} |
|
|
|
public class Generic<T> where T : class |
|
{ |
|
public T? Item { |
|
get { |
|
return field; |
|
} |
|
set { |
|
if (value != null) |
|
{ |
|
field = value; |
|
} |
|
} |
|
} |
|
|
|
public T Lazy => field ?? (field = Activator.CreateInstance<T>()); |
|
} |
|
|
|
public class Notify : INotifyPropertyChanged |
|
{ |
|
public string Name { |
|
get { |
|
return field; |
|
} |
|
set { |
|
if (field != value) |
|
{ |
|
field = value; |
|
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Name")); |
|
} |
|
} |
|
} = ""; |
|
|
|
public event PropertyChangedEventHandler? PropertyChanged; |
|
} |
|
|
|
public struct StructProperties |
|
{ |
|
public int Value { |
|
get { |
|
return field; |
|
} |
|
set { |
|
field = value & 0xFF; |
|
} |
|
} |
|
|
|
public readonly int Doubled => field * 2; |
|
|
|
public StructProperties(int doubled) |
|
{ |
|
Doubled = doubled; |
|
} |
|
} |
|
|
|
public class RealFieldName |
|
{ |
|
private int field; |
|
|
|
public int PlusOne => this.field + 1; |
|
|
|
public void Reset() |
|
{ |
|
field = 0; |
|
} |
|
} |
|
|
|
public class Field |
|
{ |
|
public int Value; |
|
} |
|
|
|
// A generated local name comes from its type, so a local of type "Field" would be |
|
// called "field" - which C# 14 rejects inside an accessor (CS9273), because the |
|
// identifier is the backing-field keyword there. |
|
public class FieldTypedLocal |
|
{ |
|
public int Count { |
|
get { |
|
Field field2 = Create(); |
|
Console.WriteLine(field2.Value); |
|
return field2.Value + field; |
|
} |
|
set { |
|
field = value; |
|
} |
|
} |
|
|
|
// Same collision from the other direction: a local named after the method it is |
|
// assigned from, with the "Get" prefix stripped. |
|
public int FromGetter { |
|
get { |
|
int field2 = GetField(); |
|
Console.WriteLine(field2); |
|
return field2 + field; |
|
} |
|
set { |
|
field = value; |
|
} |
|
} |
|
|
|
private static Field Create() |
|
{ |
|
return new Field(); |
|
} |
|
|
|
private static int GetField() |
|
{ |
|
return 42; |
|
} |
|
} |
|
|
|
// A static member named "field" cannot be disambiguated with "this.", so the accessor |
|
// has to name the declaring type instead; a bare "field" there would bind to the |
|
// property's own backing field. |
|
public class RealStaticFieldName |
|
{ |
|
private static int field; |
|
|
|
public static int PlusOne => RealStaticFieldName.field + 1; |
|
|
|
public static void Reset() |
|
{ |
|
field = 0; |
|
} |
|
} |
|
|
|
// 0.00m and -0.0 compare equal to their defaults but are observably different, so |
|
// neither initializer may be dropped as a redundant default. |
|
public struct PreciseDefaults |
|
{ |
|
public decimal Scale { |
|
get { |
|
return field; |
|
} |
|
set { |
|
field = value; |
|
} |
|
} = 0.00m; |
|
|
|
public double Sign { |
|
get { |
|
return field; |
|
} |
|
set { |
|
field = value; |
|
} |
|
} = -0.0; |
|
|
|
public PreciseDefaults() |
|
{ |
|
} |
|
} |
|
|
|
public Func<int> Capture { |
|
get { |
|
return () => (field != null) ? 1 : 0; |
|
} |
|
set; |
|
} |
|
|
|
public int GetOnly { |
|
get { |
|
if (field == 0) |
|
{ |
|
field = 42; |
|
} |
|
return field; |
|
} |
|
} |
|
|
|
public string InitChecked { |
|
get; |
|
init { |
|
field = value.Trim(); |
|
} |
|
} = ""; |
|
|
|
public int LazyGet { |
|
get { |
|
if (field == 0) |
|
{ |
|
field = ComputeDefault(); |
|
} |
|
return field; |
|
} |
|
set; |
|
} |
|
|
|
public string NullResilient => field ?? (field = CreateDefault()); |
|
|
|
public string? OptionalText { |
|
get { |
|
return field; |
|
} |
|
set { |
|
field = value ?? string.Empty; |
|
} |
|
} |
|
|
|
public int SetOnly { |
|
set { |
|
field = value * 2; |
|
} |
|
} |
|
|
|
public int SetterValidated { |
|
get; |
|
set { |
|
if (value < 0) |
|
{ |
|
throw new ArgumentOutOfRangeException("value"); |
|
} |
|
field = value; |
|
} |
|
} |
|
|
|
public static int StaticCounter { |
|
get { |
|
return field; |
|
} |
|
set { |
|
field = Math.Max(field, value); |
|
} |
|
} |
|
|
|
public static Func<int> StaticFuncProperty { |
|
get { |
|
return () => (field == null) ? 1 : 2; |
|
} |
|
set; |
|
} |
|
|
|
public int TrivialGet => field; |
|
|
|
public int ViaLocalFunction { |
|
get { |
|
return Twice(); |
|
int Twice() |
|
{ |
|
return field * 2; |
|
} |
|
} |
|
set; |
|
} |
|
|
|
[field: NonSerialized] |
|
public int WithFieldAttribute { |
|
get { |
|
return field; |
|
} |
|
set { |
|
field = value & 0xF; |
|
} |
|
} |
|
|
|
public int WithInit { |
|
get { |
|
return field; |
|
} |
|
set { |
|
field = value + 1; |
|
} |
|
} = 5; |
|
|
|
private static int ComputeDefault() |
|
{ |
|
return 7; |
|
} |
|
|
|
private static string CreateDefault() |
|
{ |
|
return "x"; |
|
} |
|
} |
|
}
|
|
|