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.
230 lines
4.0 KiB
230 lines
4.0 KiB
using System; |
|
|
|
namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty.StaticAbstractInterfaceMembers |
|
{ |
|
internal class C : I<C> |
|
{ |
|
private string _s; |
|
|
|
static C I<C>.P { get; set; } |
|
static event Action I<C>.E { |
|
add { |
|
|
|
} |
|
remove { |
|
|
|
} |
|
} |
|
public C(string s) |
|
{ |
|
_s = s; |
|
} |
|
|
|
static void I<C>.M(object x) |
|
{ |
|
Console.WriteLine("Implementation"); |
|
} |
|
static C I<C>.operator +(C l, C r) |
|
{ |
|
return new C(l._s + " " + r._s); |
|
} |
|
|
|
static bool I<C>.operator ==(C l, C r) |
|
{ |
|
return l._s == r._s; |
|
} |
|
|
|
static bool I<C>.operator !=(C l, C r) |
|
{ |
|
return l._s != r._s; |
|
} |
|
|
|
static implicit I<C>.operator C(string s) |
|
{ |
|
return new C(s); |
|
} |
|
|
|
static explicit I<C>.operator string(C c) |
|
{ |
|
return c._s; |
|
} |
|
} |
|
|
|
internal interface I<T> where T : I<T> |
|
{ |
|
static abstract T P { get; set; } |
|
static abstract event Action E; |
|
static abstract void M(object x); |
|
static abstract T operator +(T l, T r); |
|
static abstract bool operator ==(T l, T r); |
|
static abstract bool operator !=(T l, T r); |
|
static abstract implicit operator T(string s); |
|
static abstract explicit operator string(T t); |
|
} |
|
|
|
public interface IAmSimple |
|
{ |
|
static abstract int Capacity { get; } |
|
static abstract int Count { get; set; } |
|
static abstract int SetterOnly { set; } |
|
static abstract event EventHandler E; |
|
static abstract IAmSimple CreateI(); |
|
} |
|
|
|
internal interface IAmStatic<T> where T : IAmStatic<T> |
|
{ |
|
static int f; |
|
static T P { get; set; } |
|
static event Action E; |
|
static void M(object x) |
|
{ |
|
} |
|
static IAmStatic<T> operator +(IAmStatic<T> l, IAmStatic<T> r) |
|
{ |
|
throw new NotImplementedException(); |
|
} |
|
static IAmStatic() |
|
{ |
|
f = 42; |
|
} |
|
} |
|
|
|
internal interface IAmVirtual<T> where T : IAmVirtual<T> |
|
{ |
|
static virtual T P { get; set; } |
|
static virtual event Action E; |
|
static virtual void M(object x) |
|
{ |
|
} |
|
static virtual T operator +(T l, T r) |
|
{ |
|
throw new NotImplementedException(); |
|
} |
|
static virtual implicit operator T(string s) |
|
{ |
|
return default(T); |
|
} |
|
static virtual explicit operator string(T t) |
|
{ |
|
return null; |
|
} |
|
} |
|
|
|
internal class Uses |
|
{ |
|
public static T TestVirtualStaticUse<T>(T a, T b) where T : IAmVirtual<T> |
|
{ |
|
T.P = a; |
|
a = "World"; |
|
T.E += null; |
|
T.E -= null; |
|
T.M("Hello"); |
|
UseString((string)b); |
|
return a + b; |
|
} |
|
public static IAmStatic<T> TestStaticUse<T>(T a, T b) where T : IAmStatic<T> |
|
{ |
|
IAmStatic<T>.f = 11; |
|
IAmStatic<T>.P = a; |
|
IAmStatic<T>.E += null; |
|
IAmStatic<T>.E -= null; |
|
IAmStatic<T>.M("Hello"); |
|
return a + b; |
|
} |
|
public static I<T> TestAbstractStaticUse<T>(T a, T b) where T : I<T> |
|
{ |
|
T.P = a; |
|
a = "World"; |
|
T.E += null; |
|
T.E -= null; |
|
T.M("Hello"); |
|
UseString((string)b); |
|
return a + b; |
|
} |
|
private static void UseString(string a) |
|
{ |
|
} |
|
} |
|
|
|
public class X : IAmSimple |
|
{ |
|
public static int Capacity { get; } |
|
|
|
public static int Count { get; set; } |
|
|
|
public static int SetterOnly { |
|
set { |
|
} |
|
} |
|
|
|
public static event EventHandler E; |
|
|
|
public static IAmSimple CreateI() |
|
{ |
|
return new X(); |
|
} |
|
} |
|
|
|
public class X2 : IAmSimple |
|
{ |
|
public static int Capacity { |
|
get { |
|
throw new NotImplementedException(); |
|
} |
|
} |
|
|
|
public static int Count { |
|
get { |
|
throw new NotImplementedException(); |
|
} |
|
set { |
|
throw new NotImplementedException(); |
|
} |
|
} |
|
public static int SetterOnly { |
|
set { |
|
throw new NotImplementedException(); |
|
} |
|
} |
|
|
|
public static event EventHandler E { |
|
add { |
|
throw new NotImplementedException(); |
|
} |
|
remove { |
|
throw new NotImplementedException(); |
|
} |
|
} |
|
|
|
public static IAmSimple CreateI() |
|
{ |
|
throw new NotImplementedException(); |
|
} |
|
} |
|
|
|
internal class ZOperatorTest |
|
{ |
|
|
|
public interface IGetNext<T> where T : IGetNext<T> |
|
{ |
|
static abstract T operator ++(T other); |
|
} |
|
|
|
public struct WrappedInteger : IGetNext<WrappedInteger> |
|
{ |
|
public int Value; |
|
|
|
public static WrappedInteger operator ++(WrappedInteger other) |
|
{ |
|
WrappedInteger result = other; |
|
result.Value++; |
|
return result; |
|
} |
|
} |
|
|
|
public void GenericUse<T>(T t) where T : IGetNext<T> |
|
{ |
|
++t; |
|
} |
|
} |
|
}
|
|
|