As I understand, the constructor chaining can be applied to cases when we have some common data to initialize. I have 3 constructors that accept 3 different types of arguments and have some common data. I'm not sure if I can do constructor chaining.public class RStandart{    private readonly SqlConnection _objConn;    private readonly RequestData _requestData = new RequestData();    public string CardNo { get; set; }    public string PaymentType { get; set; }    public double Total { get; set; }    public DateTime TransactionDate { get; set; }    public string TransactionId { get; set; }    public class RequestData    {        // Request data (just a properties}    }    public RequestData GetRequestData    {        get { return _requestData; }    }    public RStandart(Int64 orderID, string total)    {        _requestData.VpcVirtualPaymentClientURL = string.Format(https://{0}/vpcpay, ConfigurationManager.AppSettings[vpc_VirtualPaymentClientURL]);        _requestData.VpcVersion = ConfigurationManager.AppSettings[vpc_Version];        _requestData.VpcCommand = ConfigurationManager.AppSettings[vpc_Command];        _requestData.VpcAccessCode = ConfigurationManager.AppSettings[vpc_AccessCode];        _requestData.VpcOrderInfo = orderID;        _requestData.VpcMerchant = ConfigurationManager.AppSettings[vpc_Merchant];        _requestData.VpcAmount = int.Parse(total.Replace(., string.Empty).Replace(,, string.Empty));        _requestData.VpcLocale = ConfigurationManager.AppSettings[vpc_Locale];        _requestData.VpcReturnURL = ConfigurationManager.AppSettings[vpc_ReturnURL];        _requestData.RequestParams = string.Format(            vpc_Version-{0}|vpc_Command-{1}|vpc_AccessCode-{2}|vpc_MerchTxnRef-{3}|vpc_Merchant-{4}|vpc_Amount-{5}|vpc_Locale-{6}|vpc_ReturnURL-{7}|vpc_OrderInfo-{8},            _requestData.VpcVersion, _requestData.VpcCommand, _requestData.VpcAccessCode, _requestData.VpcMerchTxnRef, _requestData.VpcMerchant,            _requestData.VpcAmount.ToString(), _requestData.VpcLocale, _requestData.VpcReturnURL, _requestData.VpcOrderInfo);        _requestData.VpcSecureHash = GetMD5(SortParamStr(_requestData.RequestParams), ConfigurationManager.AppSettings[vpc_SecureHash]);    }    public RStandart(SqlConnection conn)    {        _objConn = conn;        SetDefaultValues();        _requestData.VpcVirtualPaymentClientURL = string.Format(https://{0}/vpcdps, ConfigurationManager.AppSettings[vpc_VirtualPaymentClientURL]);        _requestData.VpcVersion = ConfigurationManager.AppSettings[vpc_Version];        _requestData.VpcCommand = ConfigurationManager.AppSettings[vpc_CommandDR];        _requestData.VpcAccessCode = ConfigurationManager.AppSettings[vpc_AccessCode];        _requestData.VpcMerchant = ConfigurationManager.AppSettings[vpc_Merchant];        _requestData.VpcUser = ConfigurationManager.AppSettings[vpc_User];        _requestData.VpcPassword = ConfigurationManager.AppSettings[vpc_Password];        _requestData.RequestParams = string.Format(            vpc_Version={0}&vpc_Command={1}&vpc_AccessCode={2}&vpc_MerchTxnRef={3}&vpc_Merchant={4}&vpc_User={5}&vpc_Password={6},            _requestData.VpcVersion, _requestData.VpcCommand, _requestData.VpcAccessCode, _requestData.VpcMerchTxnRef,            _requestData.VpcMerchant, _requestData.VpcUser, _requestData.VpcPassword);    }    public RStandart(HttpRequest request)    {        string vpc_SH = Query.GetStrQueryParam(request, vpc_SecureHash);        var query = new StringBuilder();        foreach (string key in request.QueryString.Keys)        {            if ((key != rsCheck) && (key != vpc_SecureHash))            {                query.AppendFormat({0}-{1}|, key, Query.GetStrQueryParam(request, key));            }        }        _requestData.VpcSecureHash = GetMD5(SortParamStr(query.ToString().Substring(0, query.ToString().Length - 1)), ConfigurationManager.AppSettings[vpc_SecureHash]);        if (_requestData.VpcSecureHash.ToUpper() == vpc_SH)        {            int respCode = Query.GetIntQueryParam(request, vpc_TxnResponseCode);            _requestData.VpcMessage = Query.GetStrQueryParam(request, vpc_Message);            if ((respCode == 0) && (_requestData.VpcMessage.IndexOf(Approved) > -1))            {                _requestData.VpcOrderInfo = Query.GetIntQueryParam(request, vpc_OrderInfo);                Total = double.Parse(Query.GetStrQueryParam(request, vpc_Amount).Length > 2                                        ? Query.GetStrQueryParam(request, vpc_Amount)                                            .Insert(Query.GetStrQueryParam(request, vpc_Amount).Length - 2, ,)                                        : 0, + Query.GetStrQueryParam(request, vpc_Amount));                TransactionDate = string.IsNullOrEmpty(Query.GetStrQueryParam(request, vpc_BatchNo))                                        ? DateTime.Now                                        : DateTime.Parse(                                            Query.GetStrQueryParam(request, vpc_BatchNo)                                                .Insert(6, -)                                                .Insert(4, -));                TransactionId = Query.GetStrQueryParam(request, vpc_TransactionNo);                CardNo = Query.GetStrQueryParam(request, vpc_CardNum);            }        }    }}I'm also not sure if I should have RequestData class as nested class or it should be out of RStandard class, but in the same namespace.
3 constructors that accept 3 different types of arguments
c#