[ 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