[ 
https://issues.apache.org/jira/browse/THRIFT-1127?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13604912#comment-13604912
 ] 

Thunder Stumpges commented on THRIFT-1127:
------------------------------------------

Re-reading number 1. in my post above, I think it may have been confusing. What 
I did in the case of a required member with a default value, is use the 
field-backed property instead of auto-property, but leave out the _isset stuff. 
required members with no defaults still behave as they did per THRIFT-1783 so:
{code}
  1 : optional string OptSNoDef,
  2 : required string ReqSWDef = "I am required",
  3 : required string ReqSNoDef
{code}

becomes:
{code}
    private string _OptSNoDef;
    private string _ReqSWDef = "I am required";

    public string OptSNoDef
    {
      get
      {
        return _OptSNoDef;
      }
      set
      {
        __isset.OptSNoDef = true;
        this._OptSNoDef = value;
      }
    }

    public string ReqSWDef
    {
      get
      {
        return _ReqSWDef;
      }
      set
      {
        this._ReqSWDef = value;
      }
    }

    public string ReqSNoDef { get; set; }

{code}

                
> C# should not generate default constructor
> ------------------------------------------
>
>                 Key: THRIFT-1127
>                 URL: https://issues.apache.org/jira/browse/THRIFT-1127
>             Project: Thrift
>          Issue Type: Bug
>          Components: C# - Compiler
>    Affects Versions: 0.5
>            Reporter: William Blinn
>         Attachments: DontCreateEmptyDefaultConstructor.patch
>
>
> The C# code generator should not produce a default constructor. 
> Thrift generates partial classes for thrift structs, meaning that the class 
> may be spread across multiple files and csc will link them to be a separate 
> file. When the thrift generated class has the partial constructor, it cannot 
> be added in other files. This is a problem if you want to implement a default 
> constructor that does some initialization to the data in the class.
> For example, this thrift code:
> {code}
> struct DateTime
> {
>     1: required i64 ticks,
> }
> {code}
> produces
> {code}
> /**
>  * Autogenerated by Thrift
>  *
>  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
>  */
> using System;
> using System.Collections;
> using System.Collections.Generic;
> using System.Text;
> using System.IO;
> using Thrift;
> using Thrift.Collections;
> using Thrift.Protocol;
> using Thrift.Transport;
> namespace Thrift.Generated
> {
>   [Serializable]
>   public partial class DateTime : TBase
>   {
>     private long _ticks;
>     public long Ticks
>     {
>       get
>       {
>         return _ticks;
>       }
>       set
>       {
>         __isset.ticks = true;
>         this._ticks = value;
>       }
>     }
>     public Isset __isset;
>     [Serializable]
>     public struct Isset {
>       public bool ticks;
>     }
>     public DateTime() {
>     }
>     public void Read (TProtocol iprot)
> ...
> {code}
> It would be great if it instead produced code like this:
> {code}
> /**
>  * Autogenerated by Thrift
>  *
>  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
>  */
> using System;
> using System.Collections;
> using System.Collections.Generic;
> using System.Text;
> using System.IO;
> using Thrift;
> using Thrift.Collections;
> using Thrift.Protocol;
> using Thrift.Transport;
> namespace Thrift.Generated
> {
>   [Serializable]
>   public partial class DateTime : TBase
>   {
>     private long _ticks;
>     public long Ticks
>     {
>       get
>       {
>         return _ticks;
>       }
>       set
>       {
>         __isset.ticks = true;
>         this._ticks = value;
>       }
>     }
>     public Isset __isset;
>     [Serializable]
>     public struct Isset {
>       public bool ticks;
>     }
>     public void Read (TProtocol iprot)
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to