using System;

partial class TwoPartClass
{
    // Declaring declaration.
    public partial TwoPartClass(object obj);
    partial void PartialMethodWithBody1();
    public partial object PartialMethodWithBody2(object obj);
    partial void PartialMethodWithoutBody1();
    public void Method2() { }
    // Declaring declaration.
    public partial object PartialProperty1 { get; set; }
    // Declaring declaration.
    public partial object this[int index] { get; set; }
    // Declaring declaration.
    public partial event EventHandler PartialEvent1;
}

partial class TwoPartClass
{
    // Implementation declaration.
    public partial TwoPartClass(object obj) { }
    partial void PartialMethodWithBody1() { }
    public partial object PartialMethodWithBody2(object obj)
    {
        return obj;
    }
    public void Method3() { }
    private object _backingField;
    // Implementation declaration.
    public partial object PartialProperty1
    {
        get { return _backingField; }
        set { _backingField = value; }
    }
    private object[] _backingArray;
    // Implmentation declaration.
    public partial object this[int index]
    {
        get { return _backingArray[index]; }
        set { _backingArray[index] = value; }
    }

    // Implementation declaration.
    public partial event EventHandler PartialEvent1 { add { } remove { } }
}

partial class OnePartPartialClass
{
    partial void PartialMethodWithoutBody2();
    public void Method4() { }
}

class NonPartialClass
{
    public NonPartialClass(object obj) { }
    public void Method5() { }
    public object Property { get; set; }
    public object this[int index]
    {
        get { return null; }
        set { }
    }
    public event EventHandler Event;
}
