标签: primary-constructor

C# 12 中主构造函数的 Null 检查

我使用 C# 12。在 C# 12 中我可以使用主构造函数:

public class UserService(IUnitOfWork uow) : IUserService
{
}
Run Code Online (Sandbox Code Playgroud)

在 C# 12 之前,我对构造函数中注入的项使用 null 检查:

public class UserService : IUserService
{
    private readonly IUnitOfWork _uow;

    public UserService(IUnitOfWork uow)
    {
        ArgumentNullException.ThrowIfNull(uow);
        _uow = uow;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我如何在 C# 12 中进行 null 检查?
是否需要对主构造函数使用快速失败?

c# fail-fast primary-constructor .net-8.0 c#-12.0

19
推荐指数
1
解决办法
1919
查看次数

为什么 C# 12 主构造函数以相反的顺序执行?

为什么C# 12 中的主构造函数以相反的顺序执行?

\n

至少可以说这是一个突破性的改变......

\n

例子:

\n
namespace Whatever;\n\n[TestClass]\npublic class UnitTestTemp\n{\n    [TestMethod]\n    public void TestMethod1() // PASS // is expected, 1st is 1, 2nd is 2\n    {\n        using var stream = new MemoryStream(new byte[] { 1, 2, 3, 4 });\n\n        var classicDerived = new ClassicDerived(stream);\n\n        Console.WriteLine(classicDerived.Value1);\n        Console.WriteLine(classicDerived.Value2);\n\n        Assert.AreEqual(1, classicDerived.Value1);\n        Assert.AreEqual(2, classicDerived.Value2);\n    }\n\n    [TestMethod]\n    public void TestMethod2() // FAIL // is opposite, 1st is 2, 2nd is 1\n    {\n        using var stream = new MemoryStream(new byte[] { …
Run Code Online (Sandbox Code Playgroud)

c# constructor primary-constructor .net-8.0 c#-12.0

12
推荐指数
2
解决办法
465
查看次数

远离主要构造者

Visual Studio 2013的C#6预览版支持主要构造函数,该团队已决定不会将其纳入最终版本.不幸的是,我的团队使用主要构造函数实现了200多个类.

我们现在正在寻找最简单的迁移源代码的途径.因为这是一次性的事情,一个神奇的正则表达式替换字符串或hacky解析器将起作用.

在我花了很多时间写这样一个野兽之前,那里有没有人已经做过这个或知道更好的方法?

c# roslyn c#-6.0 primary-constructor

11
推荐指数
1
解决办法
1310
查看次数

我应该在 C# 12 中为主构造函数参数创建私有属性吗?

我正在使用 C# 12。在 C# 12 中我可以使用主构造函数:

实施1:

public class Calculation(int a,int b)
{
  public int Addition() => a + b;
  public int Subtraction() => a - b;
}
Run Code Online (Sandbox Code Playgroud)

实施2:

public class Calculation(int a,int b)
{
 private int _a { get; init; } = a;
 private int _b { get; init; } = b;
 public int Addition() => _a + _b;
 public int Subtraction() => _a - _b;
}
Run Code Online (Sandbox Code Playgroud)

当我像这样调用这个方法时:

console.WriteLine(new Calculation(10,25).Addition());
Run Code Online (Sandbox Code Playgroud)

两种实现都工作正常,所以我想知道使用较长的实现 2 相对于较短的实现 1 是否有任何优势。

c# primary-constructor .net-8.0 c#-12.0

10
推荐指数
2
解决办法
1548
查看次数

为什么Kotlin有两种类型的构造函数?

Kotlin具有两种构造函数,主要构造函数和次要构造函数。拥有两种类型的目的是什么?我认为,这会使代码更加复杂和不一致。如果两种类型的构造函数都创建类的对象,则它们对类同样重要。

同时,多个初始化程序还会带来混乱并降低可读性。

constructor kotlin primary-constructor

5
推荐指数
1
解决办法
471
查看次数

主构造函数未在C#6.0中编译

我试图在C#6.0中编写一个主要构造函数新功能的简单示例,但我无法编译它.我已将语言版本更改为c#6.0但它仍然无效.

在此输入图像描述

public class Person (string fName, string lName)
{
    public string FName { get; private set; } = fName;
    public string LName { get; private set; } = lName;
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能编译?

c# c#-6.0 primary-constructor

4
推荐指数
1
解决办法
690
查看次数

Kotlin:如何在主构造函数中使用自定义设置器

我不知道如何做到这一点,以便在创建对象时,参数的值“通过设置器”,我得到的最接近的是复制代码,在创建对象时使用一次,然后在二传手

class User(var name: String, password: String, age: Int) {

    // IDK how use a custom setter in the primary constructor
    var password: String = if (password.length > 6) password else throw  IllegalArgumentException("Password is too short")
        set(value) {
            if(value.length > 6)
                field = value
            else
                throw IllegalArgumentException("Password is too short")
        }

    var age: Int = if (age > 18) age else throw IllegalArgumentException("Age must be 18+")
        set(value) {
            if(value > 18 )
                field = value
            else
                throw IllegalArgumentException("Age must be …
Run Code Online (Sandbox Code Playgroud)

set kotlin primary-constructor

2
推荐指数
1
解决办法
462
查看次数