我有一个示例类:
class SampleClass
{
public virtual string SomeProperty{get; set;}
public virtual void SomeMethod() {
// code
}
}
Run Code Online (Sandbox Code Playgroud)
我可以继承它并覆盖SomeProperty和SomeMethod,如下所示:
class ChildClass:SampleClass
{
public override string SomeProperty{get; set;}
public override void SomeMethod() {
// code
}
}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以覆盖一个对象,而不是一个类?喜欢
SampleClass sampleObject = new sampleObject();
Run Code Online (Sandbox Code Playgroud)
并且sampleObject.SomeMethod()是唯一的吗?谢谢.
只是一个简单的问题:
我已经读过,当一个类不修改它的实例时,它应该是静态的.因此,如果我有一个名为Account的类,并且它具有Id,Duration等属性,并且这些属性不会被类修改,那么这可以是静态的,否则它应该保持静态.
这个(实例本身,通过其属性,是否变异)如何影响静态/实例决策?
此外,如果一个类需要加载参数(比如这个Account类,坚持我们的类比),但不修改实例(因此没有Account变量更改 - 没有像Account.x = y //其中y来自另一个类) ,我认为这仍然是静态的?因此,不是参数是一个问题或它们来自哪里,它们是做什么的?
如果它是一个属性,同样的原则适用于决定使一个字段静态或不是(如果字段持有的数据将是昂贵的,然后有一个字段持有它 - 静态 - 如果我错了纠正我).
我注意到在C#上有超过100个静态方法的线程(这是一个静态的方法,因为它处理参数),我将阅读所有这些,因为有很好的问题和好的答案.
谢谢
我可能会发现这一切都错了,但我有一个名为CategoryControl的用户控件,可能会有很多人喜欢它,因此我认为它的许多功能都可以更好地用作静态方法.我想知道是否有一种"更好"的方式来访问这些方法,然后在整个类中传递一个实例.这些方法是公共静态的,因为它们将通过其他方法更新.想到了扩展方法的想法..?
public CategoryControl(UserCategory userCategory)
{
InitializeComponent();
PopulateControl(userCategory, this);
}
private static void PopulateControl(UserCategory userCategory, CategoryControl instance)
{
SetCategoryTitle(userCategory, instance);
SetPercentCorrect(userCategory, instance);
SetQuestionsMissed(userCategory, instance);
SetBackgroundBar(userCategory, instance);
SetForegroundBar(userCategory, instance);
}
Run Code Online (Sandbox Code Playgroud)
更新::
更长的故事是我在屏幕上有一个Panel,该面板包含相关的用户类别.相关我的意思是用户可以选择更改课程,从而显示一组新的类别.用户还可以基于他们与软件的交互来改变类别的值.所以...
面板显示课程的类别.
我在面板中维护一个活动的类别控件列表,主窗体告诉面板何时绘制一组新的类别.
public void InitializeProgressPanel(UserCategories parentCategories)
{
Contract.Requires(parentCategories != null, "parentCategories is null.");
RemoveAllControlsFromList(_categoryControls);
UserCategories sortedUserCategories = parentCategories.SortByWorst();
int categoriesCount = parentCategories.Count();
int spacer = (Height - (CategoryControl.Controls_Height * categoriesCount)) / categoriesCount+1;
for (int i = 0; i < sortedUserCategories.Count; i++)
{
CategoryControl cc = new CategoryControl((UserCategory)sortedUserCategories[i]);
cc.Left = 0; …Run Code Online (Sandbox Code Playgroud) 我有一组独立的函数,我想把它放在一个类中.它们不依赖于类的任何对象,因此在调用它们时,所需的所有值都将作为参数传递.如果我将它们全部声明为静态以便我可以只使用一个命令来调用它们,className::functionName(argument1,argument2,...)
或者我将它们保存为普通的公共函数并通过类对象调用它们,这样可以吗?
我的应用程序是从XLSX电子表格中获取大量数据(400k +记录),在表单上的DataGridView中显示每个工作表中的数据,还允许您将选定工作表的数据导出到mySQL中.
导出将发生在它自己的线程上(请注意,这里有很多不完整的):
private AddItemCallBack AddItemDelegate = new AddItemCallBack(AddItemMethod);
private delegate void AddItemCallBack(int Total);
private void lnkExport_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
sName = ddlTables.SelectedValue.ToString();
pb = progressBar1;
var t = new Thread(() => ExportData(sName));
t.Start();
}
private void ExportData(string SheetName = "")
{
string sql = "select * from " + String.Format(tablename, SheetName);
OleDbCommand cmd = new OleDbCommand(sql, conn);
DataSet ds = new DataSet();
OleDbDataAdapter da = new OleDbDataAdapter();
da.SelectCommand = cmd;
da.Fill(ds);
connStr = "Data Source=localhost; Initial Catalog=test; User …Run Code Online (Sandbox Code Playgroud) 我想测试,无论是否Collection.sort(...)使用JMockit调用:
final List<Employee> employees = new ArrayList<>();
new Expectations() {
{
Collections.sort((List<Employee>) any);
result = employees;
}
};
assertThat(EmployeeRepository.getAllOrderedByName()).isSameAs(employees);
Run Code Online (Sandbox Code Playgroud)
这是我测试中的示例存储库的实现:
public class EmployeeRepository {
private static List<Employee> employees = new ArrayList<>();
public static List<Employee> getAllOrderedByName() {
Collections.sort(employees);
return employees;
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行单元测试时,我得到一个NullPointerException Collections.sort.由于调试器永远不会到达方法中的断点,因此在自我模拟中似乎是一个问题getAllOrderedByName.
如何使用anyJMockit存储静态方法?
我有两个问题已经在脑子里转了一段时间,我希望有些知识渊博的人可以为我回答:)
我理解一个内部类是非静态的,而外部类的静态方法不能引用它.
我有这个代码,这不起作用,我理解为什么这不起作用.
class OuterClass {
class InnerClass{}
public static void outherMethod() {
InnerClass i = new InnerClass();
}
}
Run Code Online (Sandbox Code Playgroud)
但是后来我有了其他代码,它可以工作,但我不明白为什么它与第一个不同.它为什么有效?
class OuterClass {
class InnerClass{}
public static void outherMethod() {
InnerClass i = new OuterClass.new InnerClass();
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
编辑:它没有重复,因为它不是同一个问题.我不是在问静态嵌套类,我问的是静态方法和内部类
我正在尝试构建一个ETL机器进行测试.
class TestETLMachine(object):
API_URL = 'https://9g9xhayrh5.execute-api.us-west-2.amazonaws.com/test/data'
@staticmethod
def get_email_data(cls):
headers = {'accept': 'application/json'}
r = requests.get(cls.API_URL, headers=headers)
email_objects_as_list_of_dicts = json.loads(r.content)['data']
return email_objects_as_list_of_dicts
@staticmethod
def get_distinct_emails(cls):
email_data = cls.get_email_data()
print email_data
Run Code Online (Sandbox Code Playgroud)
因为get_distinct_emails我想打电话TestETLMachine.get_email_data()让它知道我指的是这堂课.这个对象是一个静态机器,意味着它总是做同样的事情,并且使它的实例是毫无意义的并且看起来很糟糕.当我get_email_data现在试着打电话给我时,cls我已经不能了:
In [9]: TestETLMachine.get_email_data()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-9-cf48fc1a9c1d> in <module>()
----> 1 TestETLMachine.get_email_data()
TypeError: get_email_data() takes exactly 1 argument (0 given)
Run Code Online (Sandbox Code Playgroud)
如何在下一个类方法中调用这些类方法并使用其他类方法?萨拉马特
扩展方法当然有用于将方法添加到您不拥有的类.
但我想在Visual Studio中练习这个概念,但不确定所需的符号.
例如,我有以下课程
public static class Dog
{
public static void Bark()
{
Console.WriteLine("Woof!");
}
}
Run Code Online (Sandbox Code Playgroud)
让我们假设我不拥有这种方法(我这样做,但让我假装不这样做).我如何使用名为Jump的新方法(在本质上为void)扩展类,其中所有新方法都将打印到Dog跳跃的控制台?
我试图使用以下方法添加:
public static class SomeOtherClass
{
//extension method to the Dog class
public static Dog Jump(this Dog)
{
Console.WriteLine("Dog Jumped");
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到错误:
"狗:静态类型不能用作参数"
和
"狗:静态类型不能用作返回类型"
你能帮我解决一下这个问题吗?