using System;
using System.IO;
using System.Reflection;
using System.Xml.Serialization;
 
namespace Code.With.Ideone
{
    [Serializable]
    public abstract class C1
    {
        [XmlIgnore]
        public abstract bool IsValid_C1 { get; set;}
    }
 
    [Serializable]
    public class C2 : C1
    {
        public bool IsValid_C2 { get; set; }
 
        private bool IsPrivate_C2 { get; set; }
 
        public override bool IsValid_C1 { get; set;}
 
        public C2()
        {
            IsValid_C1 = true;
            IsValid_C2 = false;
            IsPrivate_C2 = true;
        }
    }
 
    public static class AbstractPropertiesAttributeTest
    {
    	public static void Main(string[] args)
		{
            Type c2Type = typeof(C2);
            PropertyInfo[] allpi = c2Type.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
            foreach(PropertyInfo pi in allpi)
            {
                Console.WriteLine(pi.Name);
                Console.WriteLine("=================================================");
                Attribute[] allatt = Attribute.GetCustomAttributes(pi);
                foreach(Attribute attr in allatt)
                {
                    Console.WriteLine(attr.GetType().FullName);
                }
                Console.WriteLine("**********************************");
            }
        }
	}
}