Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 600469
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 13, 20262026-05-13T16:36:34+00:00 2026-05-13T16:36:34+00:00

I’ve created an abstract class which implements a method that runs another abstract method

  • 0

I’ve created an abstract class which implements a method that runs another abstract method on a seperate thread, like this:

 public abstract class ATest
    {
        Thread t;
        protected String status;
        public void Start()
        {
            ThreadStart ts = new ThreadStart(PerformTest);
            t = new Thread(ts);
            t.Start();

        }

        public ATest(String status)
        {
            this.status=status;
        }
        public abstract void PerformTest();
    }

The idea is that classes deriving from ATest only implements the PerformTest method. Thus, any client can just call the Start() method to start the operations within PerformTest() on its own thread. An class deriving from ATest might look like:

class ConcreteTest:ATest
    {
        public ConcreteTest(String status):base(status)
        {

        }

        public override void PerformTest()
        {
            // Do some things...
            // And some more...
            status = "changed";
        }

    }

When creating a ConcreteTest object I want to pass in some object (in the example a String). When PerformTest() runs on its seperate thread the state of this object is to be changed dependent on the outcome of the operations in PerformTest(). An example using the above classes:

class Program
{
    static void Main(string[] args)
    {
        String isPassed = "original";
        ATest test = new ConcreteTest(isPassed);
        test.Start();
        Console.WriteLine(isPassed); // Prints out "original"
    }
}

So I set isPassed to “originial” and passes it to ConcreteTest, which on a separate thread changes to value to “changed”. So when i print out isPassed I hoped for the value to be set to “changed”, but it turns out it isn’t. I guess this have something to do with the value being changed on another thread that the one it was originally created on. Can anyone please explain to me why I get this behavior, and perhaps what I could do to achieve the functionality I’m looking for (that is to change isPassed on the separate thread so that when the thread is done, the Console would print out “changed”?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-13T16:36:34+00:00Added an answer on May 13, 2026 at 4:36 pm

    Strings are immutable.

    When you write status = "changed", you aren’t changing any existing string object.
    Instead, your are changing the status field to refer to an entirely different
    String instance.

    The status field has nothing to do with the isPassed variable in your Main method. When you write new ConcreteTest(isPassed), you are passing the value of the isPassed variable to the constructor.
    The parameter has nothing to do with the variable that you passed to it, except that for now, they happen to refer to the same object. The same is true of your status field.

    The simplest way to do this is to define a holder type, like this:

    class Holder<T> { public T Value { get; set; } }
    

    If you want to, you can add an implicit cast and a constructor.

    You can also do this by exposing the Status property in your base class and writing test.Status in Main.


    You also have a less obvious problem.
    There is nothing in your code that forces it to wait for the other thread to finish, so your Console.WriteLine might run before the field is assigned by the other thread.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Ask A Question

Stats

  • Questions 499k
  • Answers 500k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team
    Editorial Team added an answer This is not pretty but it works: rm -R $(ls… May 16, 2026 at 12:45 pm
  • Editorial Team
    Editorial Team added an answer Yes. Override the base1 and base2 methods in Derived to… May 16, 2026 at 12:45 pm
  • Editorial Team
    Editorial Team added an answer No, you can't. Unfortunately, UIEvent doesn't expose any public way… May 16, 2026 at 12:45 pm

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

Related Questions

No related questions found

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.