ShadowCode 1.0.0

dotnet add package ShadowCode --version 1.0.0
NuGet\Install-Package ShadowCode -Version 1.0.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="ShadowCode" Version="1.0.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add ShadowCode --version 1.0.0
#r "nuget: ShadowCode, 1.0.0"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install ShadowCode as a Cake Addin
#addin nuget:?package=ShadowCode&version=1.0.0

// Install ShadowCode as a Cake Tool
#tool nuget:?package=ShadowCode&version=1.0.0

使用

Nuget 包

Install-Package ShadowCode

引入空间名

global using ShadowCode;

完成后需要重启VS

1. 属性变更通知

1.1 基础用法

类型字段上使用AddNotifyProperty特性时会实现INotifyPropertyChanged接口,并且创建SetPropertyOnPropertyChanged方法。

查看代码: 依赖项\分析器\

[AddNotifyProperty]
partial class MyClass
{

}

/*---------------- 生成的方法如下 ----------------*/
partial class MyClass : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler? PropertyChanged;

    protected virtual bool SetProperty<T>(ref T storage, T value, [CallerMemberName] string? propertyName = null)
    {
        if (EqualityComparer<T>.Default.Equals(storage, value)) return false;
        storage = value;
        OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
        return true;
    }

    protected virtual void OnPropertyChanged(PropertyChangedEventArgs args) =>PropertyChanged?.Invoke(this, args);
}

如果方法名和现有代码冲突时可以自定义方法名称(仅在类型上有效)

[AddNotifyProperty(SetPropertyMethodName = "SetXX", OnPropertyChangedMethodName = "OnXX")]
internal partial class MyClass
{

}

/*---------------- 生成的方法如下 ----------------*/
partial class MyClass : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler? PropertyChanged;

    protected virtual bool SetXX<T>(ref T storage, T value, [CallerMemberName] string? propertyName = null)
    {
        ...
    }

    protected virtual void OnXX(PropertyChangedEventArgs args) => ...
}

1.2 在类型上创建属性

[AddNotifyProperty("Id", typeof(long))]
[AddNotifyProperty("Name", typeof(string), XmlSummary = "名字")]
internal partial class MyClass
{

}

/*---------------- 生成的内容如下 ----------------*/
internal partial class MyClass : INotifyPropertyChanged
{
    private long _id;

    /// <summary>
    /// 名字
    /// </summary>
    private string _name;

    public long Id { get => _id; set => SetProperty(ref _id, value);}

    /// <summary>
    /// 名字
    /// </summary>
    public string Name { get => _name; set => SetProperty(ref _name, value); }
}

1.3 在字段上创建属性

internal partial class MyClass
{
    [AddNotifyProperty]
    private long _id;

    //自定义属性名称和xml文档内容
    [AddNotifyProperty("X", XmlSummary = "xml文档内容")]
    private string _name;
}

/*---------------- 生成的内容如下 ----------------*/
internal partial class MyClass : INotifyPropertyChanged
{
    public long Id { get => _id; set => SetProperty(ref _id, value); }

    /// <summary>
    /// xml文档内容
    /// </summary>
    public string X { get => _name; set => SetProperty(ref _name, value); }
}

1.4 使用代码片段创建属性

在类型上标记AddNotifyProperty特性。


[AddNotifyProperty]
internal partial class MyClass
{
    //使用 代码片段(参考项目中的 propchanged.snippet)
    public long Id { get => _Id; set => SetProperty(ref _Id, value); }
    private long _Id;
}
There are no supported framework assets in this package.

Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.0 211 3/13/2022