简体   繁体   中英

how to declare a class using the new keyword as property in a static class in c#

I am currently building a namespace to handle complicated string actions. because I use the this string keyword, I must declare where the functions and properties are located as static . (the name of this class is " StringExtension ") now I have another class named StringExtensionSettings and I use its boolean properties to determent what functions in the class StringExtension will be enabled. (for the user to choose what functions he wants to use and what not) ex:

public class StringExtensionSettings
        {
            public bool DecryptString { get; set; } = true;
            public bool EncryptString { get; set; } = true;
            public bool RandomMix { get; set; } = true;
            public bool AddMidSubString { get; set; } = true;
        }

I don't want to warp the string in a class because it will make it complicated for the user. is there is any way to enable or disable function in a static class based on another class properties ? and/or how to declare a class within a static class ?

thank you in advance!

Additional resources:

the StringExtension class:

 static class StringExtension
    {
//this is what I'm trying to declare: gives an error
            public StringExtensionSettings StringSettings = new StringExtensionSettings();
            public static string AddMidSubString(this string Str, string MidSubString)
            {
            StringBuilder Result = new StringBuilder(Str);
            Result.Insert(Result.Length / 2, MidSubString);
            return Result.ToString();
            }
            public static string RandomMix(this string Str)
            {
            char[] array = Str.ToCharArray();
            Random rng = new Random();
            int n = array.Length;
            while (n > 1)
            {
                n--;
                int k = rng.Next(n + 1);
                var value = array[k];
                array[k] = array[n];
                array[n] = value;
            }
            return new string(array);
            }
// and more functions...

Follow-up of my comment in the OP

Within a Singleton (class), you are still able/ allowed to define fields.

The singleton design pattern is an interface. It is a popular class type for programs. It allows a class to enforce that it is only allocated (read -> created) once.

public sealed class StringExtensionSettings
{
    private StringExtensionSettings()
    {
    }

    private static StringExtensionSettings instance = null;
    public static StringExtensionSettings Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new StringExtensionSettings();
            }
            return instance;
        }
    }

    public bool DecryptString { get; set; } = true;
    public bool EncryptString { get; set; } = true;
    public bool RandomMix { get; set; } = true;
    public bool AddMidSubString { get; set; } = true;
}

Usage:

Single Field call

StringExtensionSettings.Instance.AddMidSubString

Implementation

public static string AddMidSubString(this string Str, string MidSubString)
{
    if (StringExtensionSettings.Instance.AddMidSubString)
    {
        StringBuilder Result = new StringBuilder(Str);
        Result.Insert(Result.Length / 2, MidSubString);
        return Result.ToString();
    }
    throw new Exception($"Not allowed to call {nameof(AddMidSubString)}");
}

Summarized; calling StringExtensionSettings.Instance creates a new instance of StringExtensionSettings, only (once!), when the private field instance of StringExtensionSettings is null.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM