gpt4 book ai didi

VBer 的 C# 问题。私有(private)字段是否必须声明为静态?

转载 作者:行者123 更新时间:2023-11-30 13:15:54 25 4
gpt4 key购买 nike

我是一名转为 C# 的 vb.net 程序员。

我有以下控制台应用程序代码(针对 NET20)

using System;
using System.IO;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;


namespace eScoreSwapper
{
class Program
{
private string _dbName = ConfigurationManager.AppSettings["dbName"];

static void Main(string[] args) {}

static void InitVars()
{
if (string.IsNullOrEmpty(_dbName)) _dbName = "";
}
}
}

这会在 InitVars 的 if 子句中为 _dbName 变量给出编译错误:

Error   1   An object reference is required for the non-static field, method, or property 'eScoreSwapper.Program._dbName'   C:\Users\SethS\Documents\eScore\Versions\Trunk\dotNet\eScoreSwapper\eScoreSwapper\Program.cs    26  38  eScoreSwapper

是不是因为它是真的。 C# 不允许您引用私有(private)类字段,除非它们被声明为静态的?我确定我做错了什么。

我可以问另一个 C# 问题吗?为什么 if 语句有效?为什么不需要大括号?只要 if 条件后跟一个表达式(如在 t-sql IF 中),它是否有效语法。

感谢您的帮助。

赛斯

最佳答案

不,但是静态方法使用的私有(private)字段可以。我认为您真正想要做的是从 InitVars() 的声明中删除 static

我假设您之前尝试过:

static void Main(string[] args) 
{
InitVars();
}

但失败了,因此您将 static 添加到 InitVars()。错误的答案。基本上,您应该假装 Main() 不是该类的一部分。

static void Main(string[] args) 
{
Program prog = new Program();
prog.InitVars();
}

就 If() 语句而言

if (string.IsNullOrEmpty(_dbName)) _dbName = "";

只是一个简短的版本:

if (string.IsNullOrEmpty(_dbName)) 
_dbName = "";

现在,在 C-ish 语言中,正式地,true 的 if() 将执行(一个)下一条语句。但是,您可以将多个语句放在一个语句中,方法是将它们用花括号括起来。但是,如果您真的只有一个声明,则不需要它们。

关于VBer 的 C# 问题。私有(private)字段是否必须声明为静态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3515501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com