c#屬性生成器

編寫C#裏面的屬性代碼是機械又重複的勞動, 長的變量名還不免敲錯, 因而寫了一個, 輸入類型和名稱自動生成屬性, 並保存到剪貼板裏, 在VS裏面粘貼過來就好了.ui

#
# generate cs property
#

#   string name
#
#   ==>
#
#   /// <summary>
#   ///
#   /// </summary>
#   public string Name
#   {
#       get { return _name; }
#       set { _name = value; }
#   } private string _name;
#

use Win32::Clipboard;

#
#
#
sub usage()
{
    print("Invalid input\n");
    print("Input format: <type> <name>\n");
    print("     Example: string Name\n");
}

#
# 
#
sub MakeProperty($$)
{
    ($type,$name) = @_;
    $member_name = get_member_name( $name );
    $property_name = get_property_name( $name );
    $s  = "#region $property_name\n";
    $s .= "/// <summary>\n";
    $s .= "/// \n";
    $s .= "/// </summary>\n";
    $s .= "public $type $property_name\n";
    $s .= "{\n";

    $s .= "\tget\n";
    $s .= "\t{\n";

    if( uc($type) eq "STRING" )
    {
        $s .= "\t\tif ($member_name == null)\n";
        $s .= "\t\t{\n";
        $s .= "\t\t\t$member_name = string.Empty;\n";
        $s .= "\t\t}\n";
    }
    else
    {
        if( is_value_type($type) == 0 )
        {
            $s .= "\t\tif ($member_name == null)\n";
            $s .= "\t\t{\n";
            $s .= "\t\t\t$member_name = new $type();\n";
            $s .= "\t\t}\n";
        }
    }
    $s .= "\t\treturn $member_name;\n";
    $s .= "\t}\n";

    # set
    $s .= "\tset\n";
    $s .= "\t{\n";
    $s .= "\t\t$member_name = value;\n";
    $s .= "\t}\n";

    $s .= "} private $type $member_name;\n";
    $s .= "#endregion //$property_name\n";
    $s .= "\n";
    output($s);
}

#
# param is a value type, example: int int32 float ...
#
sub is_value_type($)
{
    @values = qw(bool boolean byte sbyte char int16 int32 int64 uint16 uint32 uint64 int float single long double decimal);
    ($t)= @_;
    $t = uc($t);
    foreach $item( @values )
    {
        if ( $t eq uc($item) )
        {
            return 1;
        }
    }

    return 0;
}
#
#
#
sub open_output_file()
{
    open( $filehandle, ">output.cs") or die "open output file fail!";
    return $filehandle;
}

#
#
#
sub close_output_file()
{
    close( $filehandle );
}

#
#
#
sub output($)
{
    print $filehandle $s;
}

#
#
#
sub get_property_name( $ )
{
    ($val) = @_;
    return ucfirst($val);
}
#
#
#
sub get_member_name($)
{
    ($val) = @_;
    $m = '_' . lcfirst($val);
    return $m;
}

#
# main
#
sub main()
{
    while(<>)
    {

        @list = split(" ", $_);
        if( @list>=2 )
        {
            $type = $list[0];
            $name = $list[1];
            MakeProperty($type, $name);
            print "output property: $name\n";
        }
        else
        {
            if( @list == 1)
            {
                $s = substr($list[0],0,1);
                
                if( $s eq 'q' || $s eq 'Q')
                {
                    quit();
                }
            }
            usage();
        }
    }
}

#
#
#
sub quit()
{
    close_output_file();
    copy_file_content();
    exit;
}

#
#
#
sub copy_file_content()
{
    open( $filehandle, "output.cs" ) or die "open output.cs fail";
    @array = <$filehandle>;
    foreach( @array )
    {
        $lines = $lines . $_;
    }
    $CLIP = Win32::Clipboard();
    $CLIP->Set($lines);
    close($filehandle);

    print "Already copy to clipboard.\n";
}

#
# main
#
open_output_file();
main();
quit();
相關文章
相關標籤/搜索