c# - 在 C# 中使用 "template"在类中实现类似的属性

标签 c# generics properties macros

我一直想知道 - 在 C# 中是否有一种方法可以为一个类中的多个属性定义一个"template"。这就是我的意思:

假设我有以下类(class)

class MyCLass
{
    public int  IntVal1 { get {...}; set{...} }
    public byte IntVal2 { get {...}; set{...} }
    ....
    public long IntValN { get {...}; set{...} }
}

我没有在 get 和 set 访问器中编写任何特定的实现,但我的想法是所有这些属性都有非常相似的实现——不同之处可能在于它们对具有不同类型的类的不同成员进行操作,但作为整体而言,它们看起来都很相似。

我的想法是找到一种方法来定义某种(让我们称之为)带有一些参数的"template",这些参数可能用于声明所有这些属性,而无需编写每个属性的实际实现他们 - 也许使用属性!?!

我想我需要的是类似于 C 宏的东西。

最佳答案

简短的回答是“否”,但您可以采取一些措施来减少重复。例如,考虑:

private bool SetField<T>(ref T field, T value,
    [CallerMemberName] string memberName = null)
{
    if (!EqualityComparer<T>.Default.Equals(field, value))
    {
        field = value;
        var handler = PropertyChanged;
        if (handler != null) handler(this,
            new PropertyChangedEventArgs(memberName));
        return true;
    }
    return false;
}

可用于通过以下方式减少开销:

private string bar;
public string Bar
{
    get { return bar; }
    set { SetField(ref bar, value); }
}

关于c# - 在 C# 中使用 "template"在类中实现类似的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15291111/

相关文章:

java.util.Properties$LineReader.readLine

java - 如何从代码中动态查找属性文件的路径?

java - Spring 3.1 : Pulling Strings Out Of A Properties File

c# - 如何在未聚焦的 WinForms TextBox/RichTextBox 中显示光标?

c# - 目录监控

c# - 默认代理如何绕过大多数网址并仅适用于少数

java - 接口(interface)中的泛型方法

c# - 当使用的字体不支持这种语言时,Label 控件如何正确显示日语字符?

java - Kotlin 泛型 Array<T> 结果为 "Cannot use T as a reified type parameter. Use a class instead"但 List<T> 没有

java - 我知道 Java 不支持泛型数组,但我不知道如何解决这个问题,以便它可以工作