Popular Posts
Enable SSL connection for Jsoup import org.jsoup.Connection; import org.jsoup.Jsoup; import javax.net.ssl.*; import java.io.IOException; import java.security.KeyManagement... LogonUser Function : impersonate a windows user // This sample demonstrates the use of the WindowsIdentity class to impersonate a user. // IMPORTANT NOTES:  // This sample can be run only ... Build an OpenVPN server on android device Preparation An android device, in this case, Sony xperia Z is used Root permission required Linux Deploy for deploy i...
Stats
Generic in .net
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace TestConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            Person p = new Person("Bruce", 30);

            Console.WriteLine("PrintXML : ");
            PrintXML(p);

            Console.WriteLine("PrintTwo : ");
            PrintTwo("Time", DateTime.Now);

            StringBuilder sb = new StringBuilder();
            //p = CreateGenericNew(p);      // without public non-parameter constructor, not allowed
            sb = CreateGenericNew(sb);      // it's ok
            Console.WriteLine("Object is null : {0}", sb == null);

            p = CreateGenericDefault(p);    // it's ok
            sb = CreateGenericDefault(sb);  // it's ok
            Console.WriteLine("Object is null : {0}", sb == null);

            Console.Read();
        }

        static void PrintXML<T>(T obj) where T : ISerializeXML
        {
            Console.WriteLine(obj.ToXML());
        }

        static void PrintTwo<T, V>(T key, V value)
        {
            Console.WriteLine("{0}={1}", key, value);
        }

        static T CreateGenericNew<T>(T obj) where T : new()
        {
            return new T();
        }

        static T CreateGenericDefault<T>(T obj)
        {
            return default(T);
        }
    }

    interface ISerializeXML
    {
        string ToXML();
    }

    class Person : ISerializeXML
    {
        public string Name { get; private set; }
        public int Age { get; private set; }

        public Person(string name, int age)
        {
            this.Name = name;
            this.Age = age;
        }

        #region ISerializeXML 成員

        public string ToXML()
        {
            return string.Format(
                @"<person><name>{0}</name><age>{1}</age></person>",
                this.Name,
                this.Age
            );
        }

        #endregion

        public override string ToString()
        {
            return string.Format("{0},{1}", this.Name, this.Age);
        }
    }
}
output:
PrintXML : 
<person><name>Bruce</name><age>30</age></person>
PrintTwo : 
Time=2010/4/16 00:46:28
Object is null : False
Object is null : True
see also:
http://msdn.microsoft.com/en-us/library/ms379564%28VS.80%29.aspx
http://proglab-justin.blogspot.com/2010/01/net-genericdefaulttnew-t_23.html