c#属性生成器

编写C#里面的属性代码是机械又重复的劳动, 长的变量名还难免敲错, 于是写了一个, 输入类型和名称自动生成属性, 并保存到剪贴板里, 在VS里面粘贴过来就行了.

#
# 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();

转载于:https://my.oschina.net/u/234545/blog/40001

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值