C# 类和静态变量
C# 类和静态变量,c#,class,C#,Class,OutputFormatsBase是管理输出格式的基类OutputFormats1和OutputFormats2类继承自OutputFormatsBase类 我遇到了静态变量\u listOfObjects的问题,它位于OutputFormatsBase类中,无法找到解决方法 如果我将\u对象列表设置为静态,那么除了OutputFormats1和OutputFormats2类静态实例被共享之外,一切都正常,这不好 有人能建议如何解决这个问题吗?我完全迷路了 public class Output
OutputFormatsBase
是管理输出格式的基类OutputFormats1
和OutputFormats2
类继承自OutputFormatsBase
类
我遇到了静态变量\u listOfObjects
的问题,它位于OutputFormatsBase
类中,无法找到解决方法
如果我将\u对象列表
设置为静态,那么除了OutputFormats1
和OutputFormats2
类静态实例被共享之外,一切都正常,这不好
有人能建议如何解决这个问题吗?我完全迷路了
public class OutputFormats1 : OutputFormatsBase
{
public static readonly OutputFormats1 Bmp = new OutputFormats1 { Value = "BMP", FileExtension = "bmp", Id = 1 };
public static readonly OutputFormats1 Jpg = new OutputFormats1 { Value = "JPG", FileExtension = "jpg", Id = 2 };
public static readonly OutputFormats1 Png = new OutputFormats1 { Value = "PNG", FileExtension = "png", Id = 3 };
public static readonly OutputFormats1 Tiff = new OutputFormats1 { Value = "TIFF", FileExtension = "tif", Id = 4 };
public override OutputFormatsBase Selected { get; set; }
public override OutputFormatsBase Default
{
get { return Png; }
}
}
public class OutputFormats2 : OutputFormatsBase
{
public static readonly OutputFormats2 Pdf = new OutputFormats2 { Value = "PDF", FileExtension = "pdf", Id = 1 };
public override OutputFormatsBase Selected { get; set; }
public override OutputFormatsBase Default
{
get { return Pdf; }
}
}
public abstract class OutputFormatsBase
{
private static readonly List<OutputFormatsBase> _listOfObjects = new List<OutputFormatsBase>();
public string Value { get; protected internal set; }
public string FileExtension { get; protected internal set; }
public int Id { get; protected internal set; }
public abstract OutputFormatsBase Selected { get; set; }
public abstract OutputFormatsBase Default { get; }
protected OutputFormatsBase()
{
_listOfObjects.Add(this);
}
public bool Validate(string format)
{
for (var i = 0; i < _listOfObjects.Count - 1; i++)
{
var outputFormats = _listOfObjects[i];
if (format.ToLower() == outputFormats.Value.ToLower())
{
Selected = outputFormats;
return true;
}
}
return false;
}
}
公共类OutputFormats1:OutputFormatsBase
{
公共静态只读OutputFormats1 Bmp=newoutputformats1{Value=“Bmp”,FileExtension=“Bmp”,Id=1};
public static readonly OutputFormats1 Jpg=newoutputformats1{Value=“Jpg”,FileExtension=“Jpg”,Id=2};
public static readonly OutputFormats1 Png=new OutputFormats1{Value=“Png”,FileExtension=“Png”,Id=3};
public static readonly OutputFormats1 Tiff=new OutputFormats1{Value=“Tiff”,FileExtension=“tif”,Id=4};
已选择公共重写OutputFormatsBase{get;set;}
公共覆盖OutputFormatsBase默认值
{
获取{return Png;}
}
}
公共类OutputFormats2:OutputFormatsBase
{
public static readonly OutputFormats2 Pdf=new OutputFormats2{Value=“Pdf”,FileExtension=“Pdf”,Id=1};
已选择公共重写OutputFormatsBase{get;set;}
公共覆盖OutputFormatsBase默认值
{
获取{return Pdf;}
}
}
公共抽象类OutputFormatsBase
{
私有静态只读列表_listOfObjects=new List();
公共字符串值{get;受保护的内部集;}
公共字符串文件扩展名{get;受保护的内部集;}
公共int Id{get;受保护的内部集;}
已选择公共抽象输出格式数据库{get;set;}
公共抽象输出格式数据库默认值{get;}
受保护的OutputFormatsBase()
{
_添加(此);
}
公共bool验证(字符串格式)
{
对于(变量i=0;i<\u listOfObjects.Count-1;i++)
{
var outputFormats=_listOfObjects[i];
if(format.ToLower()==outputFormats.Value.ToLower())
{
所选=输出格式;
返回true;
}
}
返回false;
}
}
您可以尝试以下方法:
public abstract class OutputFormatsBase<T> where T : OutputFormatsBase
{
private static readonly List<T> _listOfObjects = new List<T>();
protected OutputFormatsBase()
{
_listOfObjects.Add((T)this);
}
}
公共抽象类OutputFormatsBase,其中T:OutputFormatsBase
{
私有静态只读列表_listOfObjects=new List();
受保护的OutputFormatsBase()
{
_添加((T)this);
}
}
每个模板实例将有一个_listOfObjects实例。您可以尝试以下方法:
public abstract class OutputFormatsBase<T> where T : OutputFormatsBase
{
private static readonly List<T> _listOfObjects = new List<T>();
protected OutputFormatsBase()
{
_listOfObjects.Add((T)this);
}
}
公共抽象类OutputFormatsBase,其中T:OutputFormatsBase
{
私有静态只读列表_listOfObjects=new List();
受保护的OutputFormatsBase()
{
_添加((T)this);
}
}
每个模板实例将有一个_listOfObjects实例。如果使用泛型,则每个泛型类型的静态值都是唯一的
public class OutputFormats1 : OutputFormatsBase<OutputFormats1>
{
public static readonly OutputFormats1 Bmp = new OutputFormats1 { Value = "BMP", FileExtension = "bmp", Id = 1 };
public static readonly OutputFormats1 Jpg = new OutputFormats1 { Value = "JPG", FileExtension = "jpg", Id = 2 };
public static readonly OutputFormats1 Png = new OutputFormats1 { Value = "PNG", FileExtension = "png", Id = 3 };
public static readonly OutputFormats1 Tiff = new OutputFormats1 { Value = "TIFF", FileExtension = "tif", Id = 4 };
public override OutputFormatsBase Selected { get; set; }
public override OutputFormatsBase Default
{
get { return Png; }
}
}
public class OutputFormats2 : OutputFormatsBase<OutputFormats2>
{
public static readonly OutputFormats2 Pdf = new OutputFormats2 { Value = "PDF", FileExtension = "pdf", Id = 1 };
public override OutputFormatsBase Selected { get; set; }
public override OutputFormatsBase Default
{
get { return Pdf; }
}
}
public abstract class OutputFormatsBase<T> where T:OutputFormatsBase
{
private static readonly List<T> _listOfObjects = new List<T>();
public string Value { get; protected internal set; }
public string FileExtension { get; protected internal set; }
public int Id { get; protected internal set; }
public abstract OutputFormatsBase Selected { get; set; }
public abstract OutputFormatsBase Default { get; }
protected OutputFormatsBase()
{
_listOfObjects.Add((T)this);
}
public bool Validate(string format)
{
for (var i = 0; i < _listOfObjects.Count - 1; i++)
{
var outputFormats = _listOfObjects[i];
if (format.ToLower() == outputFormats.Value.ToLower())
{
Selected = outputFormats;
return true;
}
}
return false;
}
}
公共类OutputFormats1:OutputFormatsBase
{
公共静态只读OutputFormats1 Bmp=newoutputformats1{Value=“Bmp”,FileExtension=“Bmp”,Id=1};
public static readonly OutputFormats1 Jpg=newoutputformats1{Value=“Jpg”,FileExtension=“Jpg”,Id=2};
public static readonly OutputFormats1 Png=new OutputFormats1{Value=“Png”,FileExtension=“Png”,Id=3};
public static readonly OutputFormats1 Tiff=new OutputFormats1{Value=“Tiff”,FileExtension=“tif”,Id=4};
已选择公共重写OutputFormatsBase{get;set;}
公共覆盖OutputFormatsBase默认值
{
获取{return Png;}
}
}
公共类OutputFormats2:OutputFormatsBase
{
public static readonly OutputFormats2 Pdf=new OutputFormats2{Value=“Pdf”,FileExtension=“Pdf”,Id=1};
已选择公共重写OutputFormatsBase{get;set;}
公共覆盖OutputFormatsBase默认值
{
获取{return Pdf;}
}
}
公共抽象类OutputFormatsBase,其中T:OutputFormatsBase
{
私有静态只读列表_listOfObjects=new List();
公共字符串值{get;受保护的内部集;}
公共字符串文件扩展名{get;受保护的内部集;}
公共int Id{get;受保护的内部集;}
已选择公共抽象输出格式数据库{get;set;}
公共抽象输出格式数据库默认值{get;}
受保护的OutputFormatsBase()
{
_添加((T)this);
}
公共bool验证(字符串格式)
{
对于(变量i=0;i<\u listOfObjects.Count-1;i++)
{
var outputFormats=_listOfObjects[i];
if(format.ToLower()==outputFormats.Value.ToLower())
{
所选=输出格式;
返回true;
}
}
返回false;
}
}
如果使用泛型,则每个泛型类型的静态值都是唯一的
public class OutputFormats1 : OutputFormatsBase<OutputFormats1>
{
public static readonly OutputFormats1 Bmp = new OutputFormats1 { Value = "BMP", FileExtension = "bmp", Id = 1 };
public static readonly OutputFormats1 Jpg = new OutputFormats1 { Value = "JPG", FileExtension = "jpg", Id = 2 };
public static readonly OutputFormats1 Png = new OutputFormats1 { Value = "PNG", FileExtension = "png", Id = 3 };
public static readonly OutputFormats1 Tiff = new OutputFormats1 { Value = "TIFF", FileExtension = "tif", Id = 4 };
public override OutputFormatsBase Selected { get; set; }
public override OutputFormatsBase Default
{
get { return Png; }
}
}
public class OutputFormats2 : OutputFormatsBase<OutputFormats2>
{
public static readonly OutputFormats2 Pdf = new OutputFormats2 { Value = "PDF", FileExtension = "pdf", Id = 1 };
public override OutputFormatsBase Selected { get; set; }
public override OutputFormatsBase Default
{
get { return Pdf; }
}
}
public abstract class OutputFormatsBase<T> where T:OutputFormatsBase
{
private static readonly List<T> _listOfObjects = new List<T>();
public string Value { get; protected internal set; }
public string FileExtension { get; protected internal set; }
public int Id { get; protected internal set; }
public abstract OutputFormatsBase Selected { get; set; }
public abstract OutputFormatsBase Default { get; }
protected OutputFormatsBase()
{
_listOfObjects.Add((T)this);
}
public bool Validate(string format)
{
for (var i = 0; i < _listOfObjects.Count - 1; i++)
{
var outputFormats = _listOfObjects[i];
if (format.ToLower() == outputFormats.Value.ToLower())
{
Selected = outputFormats;
return true;
}
}
return false;
}
}
公共类OutputFormats1:OutputFormatsBase
{
公共静态只读OutputFormats1 Bmp=newoutputformats1{Value=“Bmp”,FileExtension=“Bmp”,Id=1};
public static readonly OutputFormats1 Jpg=newoutputformats1{Value=“Jpg”,FileExtension=“Jpg”,Id=2};
public static readonly OutputFormats1 Png=new OutputFormats1{Value=“Png”,FileExtension=“Png”,Id=3};
public static readonly OutputFormats1 Tiff=new OutputFormats1{Value=“Tiff”,FileExtension=“tif”,Id=4};
已选择公共重写OutputFormatsBase{get;set;}
公共覆盖OutputFormatsBase默认值
{
获取{return Png;}
}
}
公共课