.NET Decompiler with support for PDB generation, ReadyToRun, Metadata (&more) - cross-platform!
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

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;
}
}
}